深入理解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实现逆波兰计算表达式实例详解
May 06 Python
Python实现简单过滤文本段的方法
May 24 Python
Python编程之字符串模板(Template)用法实例分析
Jul 22 Python
Python遍历numpy数组的实例
Apr 04 Python
python3调用百度翻译API实现实时翻译
Aug 16 Python
python实现抠图给证件照换背景源码
Aug 20 Python
解决Python3用PIL的ImageFont输出中文乱码的问题
Aug 22 Python
Django多层嵌套ManyToMany字段ORM操作详解
May 19 Python
python中有函数重载吗
May 28 Python
浅析python函数式编程
Sep 26 Python
Python Pandas数据分析工具用法实例
Nov 05 Python
python 实现网易邮箱邮件阅读和删除的辅助小脚本
Mar 01 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多进程并发编程防止出现僵尸进程的方法分析
2020/02/28 PHP
javascript 表单验证常见正则
2009/09/28 Javascript
JavaScript与Image加载事件(onload)、加载状态(complete)
2011/02/14 Javascript
event对象获取方法总结在google浏览器下测试
2013/11/03 Javascript
jQuery UI插件自定义confirm确认框的方法
2015/03/20 Javascript
jQuery带时间的日期控件代码分享
2015/08/26 Javascript
jquery限定文本框只能输入数字(整数和小数)
2016/01/08 Javascript
Three.js学习之几何形状
2016/08/01 Javascript
Node.js常用工具之util模块
2017/03/09 Javascript
JS闭包可被利用的常见场景小结
2017/04/09 Javascript
详解nodejs微信公众号开发——2.自动回复
2017/04/10 NodeJs
Angular.js ng-file-upload结合springMVC的使用教程
2017/07/10 Javascript
微信小程序开发的基本流程步骤
2019/01/31 Javascript
详解vue-cli项目开发/生产环境代理实现跨域请求
2019/07/23 Javascript
electron实现静默打印的示例代码
2019/08/12 Javascript
原生js实现点击按钮复制内容到剪切板
2020/11/19 Javascript
跟老齐学Python之通过Python连接数据库
2014/10/28 Python
python抓取网页中图片并保存到本地
2015/12/01 Python
浅谈用VSCode写python的正确姿势
2017/12/16 Python
python中ASCII码和字符的转换方法
2018/07/09 Python
详解pyppeteer(python版puppeteer)基本使用
2019/06/12 Python
pandas的排序和排名的具体使用
2019/07/31 Python
python pyinstaller打包exe报错的解决方法
2019/11/02 Python
如何定义TensorFlow输入节点
2020/01/23 Python
什么是Python包的循环导入
2020/09/08 Python
Wiggle美国:英国骑行、跑步、游泳、铁人三项商店
2018/10/27 全球购物
Linux的主要特性
2016/09/03 面试题
银行求职信个人范文
2013/12/16 职场文书
装修致歉信
2014/01/15 职场文书
计算机学生的自我评价分享
2014/02/18 职场文书
法律六进活动方案
2014/03/13 职场文书
高中军训感想
2015/08/07 职场文书
汶川大地震感悟
2015/08/10 职场文书
小学数学教学反思范文
2016/02/16 职场文书
python识别围棋定位棋盘位置
2021/07/26 Python
Apache Hudi的多版本清理服务彻底讲解
2022/03/31 Servers