深⼊理解Tensorflow中的masking和padding 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
tensorflow版本选择
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 _next().eval()
[[1 2 0] [3 4 5]]
总结
到此这篇关于深⼊理解Tensorflow中的masking和padding的⽂章就介绍到这了,更多相关Tensorflow中的masking和padding内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。