深入理解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 相关文章推荐
浅析AST抽象语法树及Python代码实现
Jun 06 Python
理解生产者消费者模型及在Python编程中的运用实例
Jun 26 Python
Mac下Anaconda的安装和使用教程
Nov 29 Python
python实现爬山算法的思路详解
Apr 09 Python
Python 给屏幕打印信息加上颜色的实现方法
Apr 24 Python
python脚本实现音频m4a格式转成MP3格式的实例代码
Oct 09 Python
pytorch加载自定义网络权重的实现
Jan 07 Python
Python如何将函数值赋给变量
Apr 28 Python
Python datetime模块使用方法小结
Jun 18 Python
python如何安装下载后的模块
Jul 03 Python
Python实现猜拳与猜数字游戏的方法详解
Apr 06 Python
Python Flask实现进度条
May 11 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速度全攻略
2006/10/09 PHP
php xml-rpc远程调用
2008/12/19 PHP
php判断ip黑名单程序代码实例
2014/02/24 PHP
PHP实现在线阅读PDF文件的方法
2015/06/23 PHP
百度地图经纬度转换到腾讯地图/Google 对应的经纬度
2015/08/28 PHP
thinkPHP模板中for循环与switch语句用法示例
2016/11/30 PHP
用Div仿showModalDialog模式菜单的效果的代码
2007/03/05 Javascript
基于jquery的一个浮动框(扩展性比较好 )
2010/08/27 Javascript
仅IE9/10同时支持script元素的onload和onreadystatechange事件分析
2011/04/27 Javascript
最佳的addEvent事件绑定是怎样诞生的
2011/10/24 Javascript
html+javascript实现可拖动可提交的弹出层对话框效果
2013/08/05 Javascript
js 控制图片大小核心讲解
2013/10/09 Javascript
vueJS简单的点击显示与隐藏的效果【实现代码】
2016/05/03 Javascript
一种基于浏览器的自动小票机打印实现方案(js版)
2016/07/26 Javascript
javascript闭包功能与用法实例分析
2017/04/06 Javascript
javascript高级模块化require.js的具体使用方法
2017/10/31 Javascript
nodejs超出最大的调用栈错误问题
2017/12/27 NodeJs
Vue 实现一个命令式弹窗组件功能
2019/09/25 Javascript
JavaScript中作用域链的概念及用途讲解
2020/08/06 Javascript
[43:43]完美世界DOTA2联赛PWL S2 FTD.C vs Rebirth 第一场 11.22
2020/11/24 DOTA
python开发中module模块用法实例分析
2015/11/12 Python
python字典多键值及重复键值的使用方法(详解)
2016/10/31 Python
使用python和Django完成博客数据库的迁移方法
2018/01/05 Python
用python实现的线程池实例代码
2018/01/06 Python
Python聊天室程序(基础版)
2018/04/01 Python
python 处理dataframe中的时间字段方法
2018/04/10 Python
Python3实现转换Image图片格式
2018/06/21 Python
python编程使用协程并发的优缺点
2018/09/20 Python
Django Form 实时从数据库中获取数据的操作方法
2019/07/25 Python
Python Pandas 转换unix时间戳方式
2019/12/07 Python
python实现人性化显示金额数字实例详解
2020/09/25 Python
详解Python中openpyxl模块基本用法
2021/02/23 Python
政法学院毕业生求职信
2014/02/28 职场文书
离婚协议书怎么写的
2014/12/14 职场文书
钢琴师观后感
2015/06/12 职场文书
开学典礼观后感
2015/06/15 职场文书