深入理解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实现上传样本到virustotal并查询扫描信息的方法
Oct 05 Python
Python实现base64编码的图片保存到本地功能示例
Jun 22 Python
pandas值替换方法
Jul 10 Python
Random 在 Python 中的使用方法
Aug 09 Python
通过python爬虫赚钱的方法
Jan 29 Python
对pandas处理json数据的方法详解
Feb 08 Python
python实现从wind导入数据
Dec 03 Python
pandas-resample按时间聚合实例
Dec 27 Python
如何在keras中添加自己的优化器(如adam等)
Jun 19 Python
使用keras实现非线性回归(两种加激活函数的方式)
Jul 05 Python
详解如何修改python中字典的键和值
Sep 29 Python
python3爬虫中多线程进行解锁操作实例
Nov 25 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处理整数函数的详解
2013/06/09 PHP
PHP防止跨域提交表单
2013/11/01 PHP
php通过淘宝API查询IP地址归属等信息
2015/12/25 PHP
Zend Framework开发入门经典教程
2016/03/23 PHP
JQuery上传插件Uploadify使用详解及错误处理
2010/04/27 Javascript
javascript实现div的拖动并调整大小类似qq空间个性编辑模块
2012/12/12 Javascript
node.js中的fs.lchmod方法使用说明
2014/12/16 Javascript
在浏览器中实现图片粘贴的jQuery插件-- pasteimg使用指南
2014/12/29 Javascript
解析JavaScript的ES6版本中的解构赋值
2015/07/28 Javascript
Bootstrap 网站实例之单页营销网站
2016/10/20 Javascript
Vue-resource实现ajax请求和跨域请求示例
2017/02/23 Javascript
webpack配置的最佳实践分享
2017/04/21 Javascript
详解Angular路由 ng-route和ui-router的区别
2017/05/22 Javascript
浅谈ajax请求不同页面的微信JSSDK问题
2018/02/26 Javascript
如何在 Vue 中使用 JSX
2021/02/14 Vue.js
合并Excel工作薄中成绩表的VBA代码,非常适合教育一线的朋友
2009/04/09 Python
Python 文件管理实例详解
2015/11/10 Python
快速入手Python字符编码
2016/08/03 Python
Python实现多线程抓取网页功能实例详解
2017/06/08 Python
详解Python list 与 NumPy.ndarry 切片之间的对比
2017/07/24 Python
numpy自动生成数组详解
2017/12/15 Python
django 2.0更新的10条注意事项总结
2018/01/05 Python
Python标准库使用OrderedDict类的实例讲解
2019/02/14 Python
python小程序实现刷票功能详解
2019/07/17 Python
在python Numpy中求向量和矩阵的范数实例
2019/08/26 Python
tensorflow模型转ncnn的操作方式
2020/05/25 Python
python中函数返回多个结果的实例方法
2020/12/16 Python
Python读取ini配置文件传参的简单示例
2021/01/05 Python
世界顶级俱乐部的官方球衣和套装:Subside Sports
2018/04/22 全球购物
什么是SCM(软件配置管理)
2014/08/16 面试题
J2EE的优越性主要表现在哪些方面
2016/03/28 面试题
大学生职业规划范文:象牙塔生活的四年计划
2014/01/14 职场文书
纪念九一八事变演讲稿:忘记意味着背叛
2014/09/14 职场文书
清洁工个人工作总结
2015/03/05 职场文书
电影地道战观后感
2015/06/04 职场文书
优秀教师主要事迹材料
2015/11/04 职场文书