深入理解Tensorflow中的masking和padding


Posted in Python onFebruary 24, 2020

TensorFlow是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。它灵活的架构让你可以在多种平台上展开计算,例如台式计算机中的一个或多个CPU(或GPU),服务器,移动设备等等。TensorFlow 最初由Google大脑小组(隶属于Google机器智能研究机构)的研究员和工程师们开发出来,用于机器学习和深度神经网络方面的研究,但这个系统的通用性使其也可广泛用于其他计算领域。

声明:

需要读者对tensorflow和深度学习有一定了解

tf.boolean_mask实现类似numpy数组的mask操作

Python的numpy array可以使用boolean类型的数组作为索引,获得numpy array中对应boolean值为True的项。示例如下:

# numpy array中的boolean mask
import numpy as np
target_arr = np.arange(5)
print "numpy array before being masked:"
print target_arr
mask_arr = [True, False, True, False, False]
masked_arr = target_arr[mask_arr]
print "numpy array after being masked:"
print masked_arr

运行结果如下:

numpy array before being masked: [0 1 2 3 4] numpy array after being masked: [0 2]

tf.boolean_maks对目标tensor实现同上述numpy array一样的mask操作,该函数的参数也比较简单,如下所示:

tf.boolean_mask(
 tensor, # target tensor
 mask, # mask tensor
 axis=None,
 name='boolean_mask'
)

下面,我们来尝试一下tf.boolean_mask函数,示例如下:

import tensorflow as tf
# tensorflow中的boolean mask
target_tensor = tf.constant([[1, 2], [3, 4], [5, 6]])
mask_tensor = tf.constant([True, False, True])
masked_tensor = tf.boolean_mask(target_tensor, mask_tensor, axis=0)
sess = tf.InteractiveSession()
print masked_tensor.eval()

mask tensor中的第0和第2个元素是True,mask axis是第0维,也就是我们只选择了target tensor的第0行和第1行。

[[1 2] [5 6]]

如果把mask tensor也换成2维的tensor会怎样呢?

mask_tensor2 = tf.constant([[True, False], [False, False], [True, False]])
masked_tensor2 = tf.boolean_mask(target_tensor, mask_tensor, axis=0)
print masked_tensor2.eval()

[[1 2] [5 6]]

我们发现,结果不是[[1], [5]]。tf.boolean_mask不做元素维度的mask,tersorflow中有tf.ragged.boolean_mask实现元素维度的mask。

tf.ragged.boolean_mask
tf.ragged.boolean_mask(
 data,
 mask,
 name=None
)

tensorflow中的sparse向量和sparse mask tensorflow中的sparse tensor由三部分组成,分别是indices、values、dense_shape。对于稀疏张量SparseTensor(indices=[[0, 0], [1, 2]], values=[1, 2], dense_shape=[3, 4]),转化成dense tensor的值为:

[[1, 0, 0, 0] [0, 0, 2, 0] [0, 0, 0, 0]]

使用tf.sparse.mask可以对sparse tensor执行mask操作。

tf.sparse.mask(
 a,
 mask_indices,
 name=None
)

上文定义的sparse tensor有1和2两个值,对应的indices为[[0, 0], [1, 2]],执行tf.sparsse.mask(a, [[1, 2]])后,稀疏向量转化成dense的值为:

[[1, 0, 0, 0] [0, 0, 0, 0] [0, 0, 0, 0]]

由于tf.sparse中的大多数函数都只在tensorflow2.0版本中有,所以没有实例演示。

padded_batch

tf.Dataset中的padded_batch函数,根据输入序列中的最大长度,自动的pad一个batch的序列。

padded_batch(
 batch_size,
 padded_shapes,
 padding_values=None,
 drop_remainder=False
)

这个函数与tf.Dataset中的batch函数对应,都是基于dataset构造batch,但是batch函数需要dataset中的所有样本形状相同,而padded_batch可以将不同形状的样本在构造batch时padding成一样的形状。

elements = [[1, 2], 
  [3, 4, 5], 
  [6, 7], 
  [8]] 
A = tf.data.Dataset.from_generator(lambda: iter(elements), tf.int32) 
B = A.padded_batch(2, padded_shapes=[None]) 
B_iter = B.make_one_shot_iterator()
print B_iter.get_next().eval()

[[1 2 0] [3 4 5]]

总结

到此这篇关于深入理解Tensorflow中的masking和padding的文章就介绍到这了,更多相关Tensorflow中的masking和padding内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python Web框架Tornado运行和部署
Oct 19 Python
TensorFlow中权重的随机初始化的方法
Feb 11 Python
Python实现动态添加属性和方法操作示例
Jul 25 Python
Python判断一个三位数是否为水仙花数的示例
Nov 13 Python
Python minidom模块用法示例【DOM写入和解析XML】
Mar 25 Python
Python+AutoIt实现界面工具开发过程详解
Aug 07 Python
浅谈Python3 numpy.ptp()最大值与最小值的差
Aug 24 Python
numpy创建单位矩阵和对角矩阵的实例
Nov 29 Python
python pptx复制指定页的ppt教程
Feb 14 Python
Python Request类源码实现方法及原理解析
Aug 17 Python
Python实现自动玩连连看的脚本分享
Apr 04 Python
Python之Matplotlib绘制热力图和面积图
Apr 13 Python
K最近邻算法(KNN)---sklearn+python实现方式
Feb 24 #Python
Python3.6 + TensorFlow 安装配置图文教程(Windows 64 bit)
Feb 24 #Python
Python enumerate内置库用法解析
Feb 24 #Python
Python模块/包/库安装的六种方法及区别
Feb 24 #Python
python之MSE、MAE、RMSE的使用
Feb 24 #Python
Python接口自动化判断元素原理解析
Feb 24 #Python
python使用turtle库绘制奥运五环
Feb 24 #Python
You might like
phpMyAdmin下载、安装和使用入门教程
2007/05/31 PHP
PHP 表单提交给自己
2008/07/24 PHP
基于empty函数的输出详解
2013/06/17 PHP
php防止sql注入示例分析和几种常见攻击正则表达式
2014/01/12 PHP
PHP COOKIE及时生效的方法介绍
2014/02/14 PHP
php中静态类与静态变量用法的区别分析
2015/01/15 PHP
php计算多维数组中所有值总和的方法
2015/06/24 PHP
PHP与SQL语句常用大全
2016/12/10 PHP
PHP实现的各类hash算法长度及性能测试实例
2017/08/27 PHP
PHP根据树的前序遍历和中序遍历构造树并输出后序遍历的方法
2017/11/10 PHP
thinkphp框架使用JWTtoken的方法详解
2019/10/10 PHP
跟我一起学写jQuery插件开发方法(附完整实例及下载)
2010/04/01 Javascript
jquery实用代码片段集合
2010/08/12 Javascript
jquery如何改变html标签的样式(两种实现方法)
2013/01/16 Javascript
javascript 树形导航菜单实例代码
2013/08/13 Javascript
javascript中call apply 的应用场景
2015/04/16 Javascript
jquery中cookie用法实例详解(获取,存储,删除等)
2016/01/04 Javascript
纯前端JavaScript实现Excel IO案例分享
2016/08/26 Javascript
AngularJS 指令的交互详解及实例代码
2016/09/14 Javascript
学习Node.js模块机制
2016/10/17 Javascript
JS小数转换为整数的方法分析
2017/01/07 Javascript
js手机号批量滚动抽奖实现代码
2020/04/17 Javascript
vue在index.html中引入静态文件不生效问题及解决方法
2019/04/29 Javascript
node.js如何根据URL返回指定的图片详解
2020/10/21 Javascript
Python实现的数据结构与算法之队列详解
2015/04/22 Python
Window环境下Scrapy开发环境搭建
2018/11/18 Python
解析Python3中的Import
2019/10/13 Python
pytorch查看通道数 维数 尺寸大小方式
2020/05/26 Python
Mytheresa英国官网:拥有160多个奢侈品品牌
2016/10/09 全球购物
中国领先的汽车保养服务平台:途虎养车
2019/10/18 全球购物
工商管理实习生自我鉴定范文
2013/12/18 职场文书
酒店爱岗敬业演讲稿
2014/09/02 职场文书
个人纪律作风整改措施思想汇报
2014/10/12 职场文书
时尚女魔头观后感
2015/06/04 职场文书
Python requests库参数提交的注意事项总结
2021/03/29 Python
Python中X[:,0]和X[:,1]的用法
2021/05/10 Python