深入理解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中的exec、eval使用实例
Sep 23 Python
Python装饰器入门学习教程(九步学习)
Jan 28 Python
python 第三方库的安装及pip的使用详解
May 11 Python
Python实现判断并移除列表指定位置元素的方法
Apr 13 Python
Ubuntu下使用python读取doc和docx文档的内容方法
May 08 Python
详解pandas的外部数据导入与常用方法
May 01 Python
django 环境变量配置过程详解
Aug 06 Python
python encrypt 实现AES加密的实例详解
Feb 20 Python
python ffmpeg任意提取视频帧的方法
Feb 21 Python
Windows 下python3.8环境安装教程图文详解
Mar 11 Python
Python3 mmap内存映射文件示例解析
Mar 23 Python
python破解同事的压缩包密码
Oct 14 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
dede3.1分页文字采集过滤规则详说(图文教程)续二
2007/04/03 PHP
PHP基础教程(php入门基础教程)一些code代码
2013/01/06 PHP
coreseek 搜索英文的问题详解
2013/06/08 PHP
PHP中的reflection反射机制测试例子
2014/08/05 PHP
ThinkPHP连接数据库及主从数据库的设置教程
2014/08/22 PHP
PHP获取youku视频真实flv文件地址的方法
2014/12/23 PHP
Yii2汉字转拼音类的实例代码
2017/04/18 PHP
日期 时间js控件
2009/05/07 Javascript
JS 控制CSS样式表
2009/08/20 Javascript
学习ExtJS Panel常用方法
2009/10/07 Javascript
window.js 主要包含了页面的一些操作
2009/12/23 Javascript
基于JQuery的一句话搞定手风琴菜单
2012/09/14 Javascript
浅析hasOwnProperty方法的应用
2013/11/20 Javascript
jQuery中:gt选择器用法实例
2014/12/29 Javascript
JS动态修改图片的URL(src)的方法
2015/04/01 Javascript
使用BootStrap和Metroui设计的metro风格微网站或手机app界面
2016/10/21 Javascript
js 点击a标签 获取a的自定义属性方法
2016/11/21 Javascript
js实现textarea限制输入字数
2017/02/13 Javascript
Ajax验证用户名或昵称是否已被注册
2017/04/05 Javascript
JQuery 选择器、DOM节点操作练习实例
2017/09/28 jQuery
JavaScript模拟实现封装的三种方式及写法区别
2017/10/27 Javascript
浅谈Vue-cli单文件组件引入less,sass,css样式的不同方法
2018/03/13 Javascript
vue项目上传Github预览的实现示例
2018/11/06 Javascript
python实现人人网登录示例分享
2014/01/19 Python
如何在python字符串中输入纯粹的{}
2018/08/22 Python
详解Python正则表达式re模块
2019/03/19 Python
Python JSON格式数据的提取和保存的实现
2019/03/22 Python
浅谈python3中input输入的使用
2019/08/02 Python
基于python实现自动化办公学习笔记(CSV、word、Excel、PPT)
2019/08/06 Python
浅析python内置模块collections
2019/11/15 Python
python列表推导式入门学习解析
2019/12/02 Python
python如何利用paramiko执行服务器命令
2020/11/07 Python
利用html5的websocket实现websocket聊天室
2013/12/12 HTML / CSS
团队会宣传标语
2014/10/09 职场文书
三人合伙协议书范本
2014/10/29 职场文书
《落花生》教学反思
2016/02/16 职场文书