深入理解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 Django连接MySQL数据库做增删改查
Nov 07 Python
利用Python如何生成随机密码
Apr 20 Python
在CentOS6上安装Python2.7的解决方法
Jan 09 Python
Python迭代器与生成器基本用法分析
Jul 26 Python
python实现彩色图转换成灰度图
Jan 15 Python
基于Python实现迪杰斯特拉和弗洛伊德算法
May 27 Python
Django 大文件下载实现过程解析
Aug 01 Python
Django 限制访问频率的思路详解
Dec 24 Python
python 在右键菜单中加入复制目标文件的有效存放路径(单斜杠或者双反斜杠)
Apr 08 Python
python collections模块的使用
Oct 16 Python
python爬取代理ip的示例
Dec 18 Python
python glom模块的使用简介
Apr 13 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类中Static方法效率测试代码
2010/10/17 PHP
php后门URL的防范
2013/11/12 PHP
PHP实现获取并生成数据库字典的方法
2016/05/04 PHP
Yii中的cookie的发送和读取
2016/07/27 PHP
thinkPHP自动验证、自动添加及表单错误问题分析
2016/10/17 PHP
php修改数组键名的方法示例
2017/04/15 PHP
CI框架教程之优化验证码机制详解【验证码辅助函数】
2019/04/16 PHP
JavaScript 学习笔记(六)
2009/12/31 Javascript
js身份证判断方法支持15位和18位
2014/03/18 Javascript
jquery实现点击文字可编辑并修改保存至数据库
2014/04/15 Javascript
详解Node.js包的工程目录与NPM包管理器的使用
2016/02/16 Javascript
浅谈jQuery中的eq()与DOM中element.[]的区别
2016/10/28 Javascript
VueJS全面解析
2016/11/10 Javascript
js+html5实现半透明遮罩层弹框效果
2020/08/24 Javascript
JS开发中基本数据类型具体有哪几种
2017/10/19 Javascript
使用jquery的cookie实现登录页记住用户名和密码的方法
2019/03/13 jQuery
Vue-cli3.x + axios 跨域方案踩坑指北
2019/07/04 Javascript
Chrome插件开发系列一:弹窗终结者开发实战
2020/10/02 Javascript
node.js爬虫框架node-crawler初体验
2020/10/29 Javascript
python实现画圆功能
2018/01/25 Python
python flask中静态文件的管理方法
2018/03/20 Python
Python文件如何引入?详解引入Python文件步骤
2018/12/10 Python
解决jupyter运行pyqt代码内核重启的问题
2020/04/16 Python
解决Django Haystack全文检索为空的问题
2020/05/19 Python
详解Python 循环嵌套
2020/07/09 Python
Python tkinter界面实现历史天气查询的示例代码
2020/08/23 Python
python实现ping命令小程序
2020/12/28 Python
html5 canvas里绘制椭圆并保持线条粗细均匀的技巧
2013/03/25 HTML / CSS
全球速卖通西班牙站:AliExpress西班牙
2017/10/30 全球购物
Yves Rocher捷克官方网站:植物化妆品的创造者
2019/07/31 全球购物
工厂总经理岗位职责
2014/02/07 职场文书
应届电子商务毕业自荐书范文
2014/02/11 职场文书
效能监察建议书
2014/05/19 职场文书
幼儿园家长心得体会
2016/01/21 职场文书
《假如》教学反思
2016/02/17 职场文书
灵能百分百第三季什么时候来?
2022/03/15 日漫