深入理解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网络编程实例简析
Sep 26 Python
实例解析Python中的__new__特殊方法
Jun 02 Python
numpy的文件存储.npy .npz 文件详解
Jul 09 Python
python os.path模块常用方法实例详解
Sep 16 Python
pandas求两个表格不相交的集合方法
Dec 08 Python
django与小程序实现登录验证功能的示例代码
Feb 19 Python
python批量将excel内容进行翻译写入功能
Oct 10 Python
python3 requests库实现多图片爬取教程
Dec 18 Python
解决django xadmin主题不显示和只显示bootstrap2的问题
Mar 30 Python
PyQt5 QDockWidget控件应用详解
Aug 12 Python
Django缓存Cache使用详解
Nov 30 Python
Python基础之Socket通信原理
Apr 22 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防CC攻击实现代码
2011/12/29 PHP
Php中用PDO查询Mysql来避免SQL注入风险的方法
2013/04/25 PHP
php时间计算相关问题小结
2016/05/09 PHP
PHP下载文件的函数实例代码
2016/05/18 PHP
php+mysql+jquery实现日历签到功能
2017/02/27 PHP
ThinkPHP+EasyUI之ComboTree中的会计科目树形菜单实现方法
2017/06/09 PHP
EXTJS记事本 当CompositeField遇上RowEditor
2011/07/31 Javascript
JQUERY 获取IFrame中对象及获取其父窗口中对象示例
2013/08/19 Javascript
改变文件域的样式实现思路同时兼容ie、firefox
2013/10/23 Javascript
jQuery实现带分组数据的Table表头排序实例分析
2015/11/24 Javascript
拥有一个属于自己的javascript表单验证插件
2016/03/24 Javascript
JavaScript判断页面加载完之后再执行预定函数的技巧
2016/05/17 Javascript
利用node.js如何搭建一个简易的即时响应服务器
2017/05/28 Javascript
详解在AngularJS的controller外部直接获取$scope
2017/06/02 Javascript
angular4中关于表单的校验示例
2017/10/16 Javascript
详解vue-router传参的两种方式
2018/09/10 Javascript
微信小程序 (地址选择1)--选取搜索地点并显示效果
2019/12/17 Javascript
如何在node环境实现“get数据解析”代码实例
2020/07/03 Javascript
Django中实现点击图片链接强制直接下载的方法
2015/05/14 Python
Python基于pillow判断图片完整性的方法
2016/09/18 Python
pytorch 数据处理:定义自己的数据集合实例
2019/12/31 Python
Django的ListView超详细用法(含分页paginate)
2020/05/21 Python
Python爬虫之Selenium实现窗口截图
2020/12/04 Python
python 实现一个简单的线性回归案例
2020/12/17 Python
python实现ping命令小程序
2020/12/28 Python
html5菜单折纸效果
2014/04/22 HTML / CSS
董事长岗位职责
2013/11/30 职场文书
个人作风剖析材料
2014/02/02 职场文书
质量承诺书范文
2014/03/27 职场文书
贷款担保书范文
2014/05/13 职场文书
体现团队精神的口号
2014/06/06 职场文书
安全标语口号
2014/06/09 职场文书
伦敦奥运会口号
2014/06/13 职场文书
中专毕业生的自荐书
2014/07/01 职场文书
Python初学者必备的文件读写指南
2021/06/23 Python
用Python可视化新冠疫情数据
2022/01/18 Python