深入理解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 08 Python
python中enumerate函数用法实例分析
May 20 Python
Python获取央视节目单的实现代码
Jul 25 Python
Python编写电话薄实现增删改查功能
May 07 Python
浅谈python字典多键值及重复键值的使用
Nov 04 Python
基于并发服务器几种实现方法(总结)
Dec 29 Python
django 通过ajax完成邮箱用户注册、激活账号的方法
Apr 17 Python
python通过Windows下远程控制Linux系统
Jun 20 Python
pyqt5 实现多窗口跳转的方法
Jun 19 Python
浅谈python 中类属性共享的问题
Jul 02 Python
django数据关系一对多、多对多模型、自关联的建立
Jul 24 Python
零基础学Python之前需要学c语言吗
Jul 21 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安全配置 如何配置使其更安全
2011/12/16 PHP
浅析get与post的一些特殊情况
2014/07/28 PHP
如何正确配置Nginx + PHP
2016/07/15 PHP
fix-ie5.js扩展在IE5下不能使用的几个方法
2007/08/20 Javascript
在模板页面的js使用办法
2010/04/01 Javascript
Jquery知识点二 jquery下对数组的操作
2011/01/15 Javascript
JavaScript面向对象(极简主义法minimalist approach)
2012/07/17 Javascript
JS正则表达式获取分组内容的方法详解
2013/11/15 Javascript
分享33个jQuery与CSS3实现的绚丽鼠标悬停效果
2014/12/15 Javascript
JavaScript中length属性的使用方法
2015/06/05 Javascript
javascript中checkbox使用方法实例演示
2015/11/19 Javascript
基于JavaScript实现根据手机定位获取当前具体位置(X省X市X县X街道X号)
2015/12/29 Javascript
用JS实现轮播图效果(二)
2016/06/26 Javascript
Chrome不支持showModalDialog模态对话框和无法返回returnValue问题的解决方法
2016/10/30 Javascript
.net MVC+Bootstrap下使用localResizeIMG上传图片
2017/04/21 Javascript
Vue自定义指令封装节流函数的方法示例
2018/07/09 Javascript
JavaScript深入V8引擎以及编写优化代码的5个技巧
2019/06/24 Javascript
vue 地区选择器v-distpicker的常用功能
2019/07/23 Javascript
python实现基于两张图片生成圆角图标效果的方法
2015/03/26 Python
两个命令把 Vim 打造成 Python IDE的方法
2016/03/20 Python
Python提取网页中超链接的方法
2016/09/18 Python
python操作MySQL 模拟简单银行转账操作
2017/09/27 Python
基于TensorFlow中自定义梯度的2种方式
2020/02/04 Python
python GUI模拟实现计算器
2020/06/22 Python
pytho matplotlib工具栏源码探析一之禁用工具栏、默认工具栏和工具栏管理器三种模式的差异
2021/02/25 Python
css3的transition效果和transfor效果示例介绍
2013/10/30 HTML / CSS
美国高品质个性化珠宝销售网站:Jewlr
2018/05/03 全球购物
德国排名第一的主题公园门票网站:Attraction Tickets Direct
2019/09/09 全球购物
应届毕业生个人自荐信范文
2013/11/30 职场文书
《小白兔和小灰兔》教学反思
2014/02/18 职场文书
奥巴马英文演讲稿
2014/05/15 职场文书
市场推广策划方案
2014/06/02 职场文书
工作业绩不及格检讨书
2014/10/28 职场文书
2014小学教师年度考核工作总结
2014/12/03 职场文书
增值税发票丢失证明
2015/06/19 职场文书
大学军训通讯稿(2016最新版)
2015/12/21 职场文书