深入理解Tensorflow中的masking和padding

作者:hustqb 时间:2022-01-26 02:21:44 

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]]

来源:https://blog.csdn.net/hustqb/article/details/104457706

标签:Tensorflow,masking,padding
0
投稿

猜你喜欢

  • Python实现列表删除重复元素的三种常用方法分析

    2022-02-17 20:21:36
  • 数据库中聚簇索引与非聚簇索引的区别[图文]

    2012-02-25 19:38:23
  • 12个对网页设计师非常有用的图片优化工具[译]

    2009-09-22 14:29:00
  • Python 实现图像合成微缩效果

    2023-08-19 22:15:16
  • 使用python遍历指定城市的一周气温

    2022-01-01 18:25:26
  • 由浅入深讲解python中的yield与generator

    2022-08-14 06:26:11
  • Oracle中获取执行计划的几种方法分析

    2023-07-17 15:18:31
  • Python中pass的作用与使用教程

    2023-05-05 23:05:05
  • Python与数据库的交互问题小结

    2021-11-14 11:46:47
  • python编写adb截图工具的实现源码

    2021-03-24 08:50:15
  • 详解Python OpenCV图像分割算法的实现

    2022-11-28 13:15:44
  • 《CSS权威指南》文摘(1)--块级元素、行内元素

    2008-04-05 13:42:00
  • Python实现实时跟随微信窗口移动的GUI界面

    2022-06-09 11:12:25
  • python的urllib模块显示下载进度示例

    2023-06-13 17:06:31
  • Python实现排序方法常见的四种

    2022-02-18 08:06:15
  • 用什么视角做产品

    2009-08-18 12:17:00
  • Python 用NumPy创建二维数组的案例

    2021-11-23 22:27:48
  • Pytorch模型微调fine-tune详解

    2021-06-17 07:29:00
  • 使用Python绘制三种概率曲线详解

    2022-07-27 00:21:01
  • 手机网站开发必修课[2009总结版]

    2010-01-05 17:02:00
  • asp之家 网络编程 m.aspxhome.com