深入理解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代理抓取并验证使用多线程实现
May 03 Python
python实现自动登录人人网并访问最近来访者实例
Sep 26 Python
Python编程中运用闭包时所需要注意的一些地方
May 02 Python
详解Python中的array数组模块相关使用
Jul 05 Python
python使用xlrd与xlwt对excel的读写和格式设定
Jan 21 Python
Python实现PS滤镜Fish lens图像扭曲效果示例
Jan 29 Python
对python3标准库httpclient的使用详解
Dec 18 Python
python抓取需要扫微信登陆页面
Apr 29 Python
python调用自定义函数的实例操作
Jun 26 Python
python的debug实用工具 pdb详解
Jul 12 Python
python返回数组的索引实例
Nov 28 Python
Python字节单位转换实例
Dec 05 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验证码函数代码(简单实用)
2013/09/29 PHP
朋友网关于QQ相关的PHP代码(研究QQ的绝佳资料)
2015/01/26 PHP
php使用高斯算法实现图片的模糊处理功能示例
2016/11/11 PHP
PHP文件系统管理(实例讲解)
2017/09/19 PHP
PHP获取链表中倒数第K个节点的方法
2018/01/18 PHP
浅谈PHP中pack、unpack的详细用法
2018/03/12 PHP
Laravel 对某一列进行筛选然后求和sum()的例子
2019/10/10 PHP
JavaScript ECMA-262-3 深入解析.第三章.this
2011/09/28 Javascript
页面装载js及性能分析方法介绍
2014/03/21 Javascript
浅谈javascript对象模型和function对象
2014/12/26 Javascript
JavaScript学习笔记之JS事件对象
2015/01/22 Javascript
使用RequireJS优化JavaScript引用代码的方法
2015/07/01 Javascript
简单的jQuery入门指引
2015/07/28 Javascript
js+canvas绘制矩形的方法
2016/01/28 Javascript
jQuery解决$符号命名冲突
2016/06/18 Javascript
浅谈Javascript中的函数、this以及原型
2016/10/09 Javascript
vue.js绑定class和style样式(6)
2016/12/09 Javascript
JavaScript利用正则表达式替换字符串中的内容
2016/12/12 Javascript
html5 canvas 详细使用教程
2017/01/20 Javascript
原生js二级联动效果
2017/06/20 Javascript
JavaScript中的return布尔值的用法和原理解析
2017/08/14 Javascript
JavaScript数组去重的方法总结【12种方法,号称史上最全】
2019/02/28 Javascript
改进 JavaScript 和 Rust 的互操作性并深入认识 wasm-bindgen 组件
2019/07/13 Javascript
Python程序设计入门(2)变量类型简介
2014/06/16 Python
NetworkX之Prim算法(实例讲解)
2017/12/22 Python
python opencv之分水岭算法示例
2018/02/24 Python
利用Python实现手机短信监控通知的方法
2019/07/22 Python
10行Python代码计算汽车数量的实现方法
2019/10/23 Python
关于初始种子自动选取的区域生长实例(python+opencv)
2020/01/16 Python
css3 盒模型以及box-sizing属性全面了解
2016/09/20 HTML / CSS
美国最便宜的旅游网站:CheapTickets
2017/07/09 全球购物
你在项目中用到了xml技术的哪些方面?如何实现的?
2014/01/26 面试题
教师业务学习制度
2014/01/25 职场文书
加薪申请报告范本
2015/05/15 职场文书
院系推荐意见
2015/06/05 职场文书
Redis 彻底禁用RDB持久化操作
2021/07/09 Redis