深入理解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解析网页源代码中的115网盘链接实例
Sep 30 Python
python实现计算倒数的方法
Jul 11 Python
django 外键model的互相读取方法
Dec 15 Python
Python OpenCV中的resize()函数的使用
Jun 20 Python
python下的opencv画矩形和文字注释的实现方法
Jul 09 Python
Python 日期区间处理 (本周本月上周上月...)
Aug 08 Python
Python values()与itervalues()的用法详解
Nov 27 Python
Python:合并两个numpy矩阵的实现
Dec 02 Python
python Tensor和Array对比分析
Jan 08 Python
浅析Python 抽象工厂模式的优缺点
Jul 13 Python
基于python实现百度语音识别和图灵对话
Nov 02 Python
Python读取文件夹下的所有文件实例代码
Apr 02 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入门学习的几个不错的实例代码
2008/07/13 PHP
PHP调试函数和日志记录函数分享
2015/01/31 PHP
php+ajax实时刷新简单实例
2015/02/25 PHP
WordPress中获取指定分类及其子分类下的文章数目
2015/12/31 PHP
thinkphp多表查询两表有重复相同字段的完美解决方法
2016/09/22 PHP
PHP Trait功能与用法实例分析
2020/06/03 PHP
Javascript的getYear、getFullYear、getUTCFullYear异同分享
2011/11/30 Javascript
Nginx上传文件全部缓存解决方案
2015/08/17 Javascript
JS实现仿Windows7风格的网页右键菜单效果代码
2015/09/11 Javascript
JS中作用域和变量提升(hoisting)的深入理解
2016/10/31 Javascript
JS写谷歌浏览器chrome的外挂实例
2018/01/11 Javascript
React精髓!一篇全概括小结(急速)
2019/05/23 Javascript
JS三级联动代码格式实例详解
2019/12/30 Javascript
浅谈vue 组件中的setInterval方法和window的不同
2020/07/30 Javascript
vue打开其他项目页面并传入数据详解
2020/11/25 Vue.js
跟老齐学Python之用while来循环
2014/10/02 Python
Python中输出ASCII大文字、艺术字、字符字小技巧
2015/04/28 Python
Python3读取zip文件信息的方法
2015/05/22 Python
django基础之数据库操作方法(详解)
2017/05/24 Python
python实现扫描ip地址的小程序
2019/04/16 Python
python打印9宫格、25宫格等奇数格 满足横竖斜相加和相等
2019/07/19 Python
pycharm 使用anaconda为默认环境的操作
2021/02/05 Python
德国电子产品购物网站:TechInTheBasket德国
2018/12/07 全球购物
Discard Protocol抛弃协议的作用是什么
2015/10/10 面试题
如何从一个文件档案的尾端新增记录
2016/12/02 面试题
机械化及自动化毕业生的自我评价分享
2013/11/06 职场文书
进口业务员岗位职责
2014/04/06 职场文书
管理标语大全
2014/06/24 职场文书
学生顶撞老师的检讨书
2014/09/17 职场文书
大学生就业协议书范本(适用于公司企业)
2014/10/07 职场文书
公务员考察材料范文
2014/12/23 职场文书
就业意向协议书
2015/01/29 职场文书
入党自传范文2015
2015/06/26 职场文书
女性健康知识讲座主持词
2015/07/04 职场文书
2016年寒假社会实践活动心得体会
2015/10/09 职场文书
JavaScript架构搭建前端监控如何采集异常数据
2022/06/25 Javascript