深入理解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里使用正则表达式的全匹配功能
Oct 19 Python
python图书管理系统
Apr 05 Python
Python实现基于C/S架构的聊天室功能详解
Jul 07 Python
78行Python代码实现现微信撤回消息功能
Jul 26 Python
python实现从文件中读取数据并绘制成 x y 轴图形的方法
Oct 14 Python
在pandas多重索引multiIndex中选定指定索引的行方法
Nov 16 Python
Python小游戏之300行代码实现俄罗斯方块
Jan 04 Python
使用python检查yaml配置文件是否符合要求
Apr 09 Python
Python通过两个dataframe用for循环求笛卡尔积
Apr 29 Python
浅谈Python中的生成器和迭代器
Jun 19 Python
python3将变量输入的简单实例
Aug 19 Python
Python 绘制多因子柱状图
May 11 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中substr()函数参数说明及用法实例
2014/11/15 PHP
PHP 接入支付宝即时到账功能
2016/09/18 PHP
javascript 硬盘序列号+其它硬件信息
2008/12/23 Javascript
Date对象格式化函数代码
2010/07/17 Javascript
基于jQuery的仿flash的广告轮播
2010/11/05 Javascript
jquery 之 $().hover(func1, funct2)使用方法
2012/06/14 Javascript
E3 tree 1.6在Firefox下显示问题的修复方法
2013/01/30 Javascript
js动态设置div的值下例子
2013/10/29 Javascript
使用js实现关闭js弹出层的窗口
2014/02/10 Javascript
node.js中的http.request方法使用说明
2014/12/14 Javascript
javascript定义变量时带var与不带var的区别分析
2015/01/12 Javascript
javascript定时器完整实例
2015/02/10 Javascript
JS实现的最简Table选项卡效果
2015/10/14 Javascript
js实现弹窗居中的简单实例
2016/10/09 Javascript
AngularJS入门教程之与服务器(Ajax)交互操作示例【附完整demo源码下载】
2016/11/02 Javascript
jQuery UI 实例讲解 - 日期选择器(Datepicker)
2017/09/18 jQuery
Vue的轮播图组件实现方法
2018/03/03 Javascript
提升node.js中使用redis的性能遇到的问题及解决方法
2018/10/30 Javascript
vue 微信扫码登录(自定义样式)
2020/01/06 Javascript
JavaScript中layim之整合右键菜单的示例代码
2021/02/06 Javascript
[48:28]完美世界DOTA2联赛循环赛FTD vs Magma第二场 10月30日
2020/10/31 DOTA
python使用urllib2提交http post请求的方法
2015/05/26 Python
Python将DataFrame的某一列作为index的方法
2018/04/08 Python
解决python读取几千万行的大表内存问题
2018/06/26 Python
pytorch梯度剪裁方式
2020/02/04 Python
保洁主管岗位职责
2013/11/20 职场文书
环境科学专业个人求职的自我评价
2013/11/28 职场文书
自我鉴定书面格式
2014/01/13 职场文书
仓库管理制度
2014/01/21 职场文书
四风存在的原因分析
2014/02/11 职场文书
高中生第一学年自我鉴定
2014/09/12 职场文书
小学科学教学计划
2015/01/21 职场文书
2015年部门工作总结范文
2015/03/31 职场文书
工作经历证明范本
2015/06/15 职场文书
十大公认最好看的动漫:《咒术回战》在榜,《钢之炼金术师》第一
2022/03/18 日漫
win10此电脑打不开怎么办 win10双击此电脑无响应的解决办法
2022/07/23 数码科技