深入理解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实现批量转换文件编码(批转换编码示例)
Jan 23 Python
python实现一次创建多级目录的方法
May 15 Python
Python获取运行目录与当前脚本目录的方法
Jun 01 Python
python批量提取word内信息
Aug 09 Python
使用Python导出Excel图表以及导出为图片的方法
Nov 07 Python
python实现的AES双向对称加密解密与用法分析
May 02 Python
python requests证书问题解决
Sep 05 Python
python 内置函数汇总详解
Sep 16 Python
python matplotlib如何给图中的点加标签
Nov 14 Python
OpenCV+Python--RGB转HSI的实现
Nov 27 Python
pytorch::Dataloader中的迭代器和生成器应用详解
Jan 03 Python
tensorflow 初始化未初始化的变量实例
Feb 06 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
PHP下打开URL地址的几种方法小结
2010/05/16 PHP
php缩小png图片不损失透明色的解决方法
2013/12/25 PHP
图文详解phpstorm配置Xdebug进行调试PHP教程
2016/06/13 PHP
php foreach如何跳出两层循环(详解)
2016/11/05 PHP
PHP实现文字写入图片功能
2019/02/18 PHP
CI(CodeIgniter)框架中URL特殊字符处理与SQL注入隐患分析
2019/02/28 PHP
javascript FormatNumber函数实现方法
2008/12/30 Javascript
jQuery LigerUI 插件介绍及使用之ligerDrag和ligerResizable示例代码打包
2011/04/06 Javascript
新发现一个骗链接的方法(js读取cookies)
2012/01/11 Javascript
JavaScript高级程序设计(第3版)学习笔记8 js函数(中)
2012/10/11 Javascript
js采用map取到id集合组并且实现点击一行选中一行
2013/12/16 Javascript
jquery实现瀑布流效果分享
2014/03/26 Javascript
js模拟淘宝网的多级选择菜单实现方法
2015/08/18 Javascript
jQuery给指定的table动态添加删除行的操作方法
2016/10/12 Javascript
简单的React SSR服务器渲染实现
2018/12/11 Javascript
layui树形菜单动态遍历的例子
2019/09/23 Javascript
vue.js实现二级菜单效果
2019/10/19 Javascript
JS函数进阶之继承用法实例分析
2020/01/15 Javascript
vue+animation实现翻页动画
2020/06/29 Javascript
js禁止查看源文件屏蔽Ctrl+u/s、F12、右键等兼容IE火狐chrome
2020/10/01 Javascript
python里对list中的整数求平均并排序
2014/09/12 Python
Python读取环境变量的方法和自定义类分享
2014/11/22 Python
Django中如何使用sass的方法步骤
2019/07/09 Python
Python编译为二进制so可执行文件实例
2019/12/23 Python
在pytorch中对非叶节点的变量计算梯度实例
2020/01/10 Python
python 将列表里的字典元素合并为一个字典实例
2020/09/01 Python
PyCharm Ctrl+Shift+F 失灵的简单有效解决操作
2021/01/15 Python
CSS3中border-radius属性设定圆角的使用技巧
2016/05/10 HTML / CSS
html5 Canvas画图教程(4)—未闭合的路径及渐变色的填充方法
2013/01/09 HTML / CSS
美国著名手表网站:Timepiece
2017/11/15 全球购物
食堂个人先进事迹
2014/01/22 职场文书
元旦晚会邀请函
2014/01/27 职场文书
自荐信的格式
2014/03/10 职场文书
集中整治工作方案
2014/05/01 职场文书
2014年党风廉政建设工作总结
2014/11/19 职场文书
用python开发一款操作MySQL的小工具
2021/05/12 Python