有没有办法用一个特定的填充值把一个可变大小的Tensor填充到一个给定的形状上?例如给定的Tensor:
[[1, 2],
[3, 4]]
以及
[[1, 2, 3],
[4, 5, 6]]
有没有一种方法可以有一个泛型操作,它可以取其中的一个,然后用一个值填充它们(比如,用值-1
来整形[2, 4]
),从而得到:
[[1, 2, -1, -1],
[3, 4, -1, -1]]
以及
[[1, 2, 3, -1],
[4, 5, 6, -1]]
我的推理(如果有更好的解决方案)是,我有来自TFRecords文件的示例,其中一部分具有可变长度。对于处理,静态长度使它们更容易处理。
4条答案
按热度按时间pokxtpni1#
是的,有,只要你不需要改变Tensor的秩,这是非常简单的。
tf.pad()
接受带Tensor的常规python列表,填充的格式是一个在维度的每一侧填充多少的对列表。例如:
如果你想把它归纳为一个有用的函数,你可以这样做:
其中
max_in_dims
本质上是输出的所需形状。* 注意:* 如果您提供的形状在任何维度上都严格小于t
,则此函数将失败。您可以像这样使用它:
或
尽管维度大小是动态计算的,但维度的数量不是,因此要确保
max_in_dims
与t.shape具有相同数量的元素。qco9c6ql2#
Multihunter's solution的一种扩展,以便仅在必要时执行填充,并且对于较长的输入不产生错误:
假设我们有一个序列输入
inp_seq
,它是一个秩为4的Tensor,应该被填充,以便在维度1中具有filter_size
的最小长度。jm2pwxwz3#
我遇到了类似的情况。不完全通用,但你可以这样做:
vjrehmav4#
The accepted answer对我也不起作用,我不愿意使用assignments in the graph。在这里,我调整了Multihunter的答案,使其可以使用可变大小。对此的一个变体对我起作用。具体来说,我使用
tf.data.TFREcordDataset
消耗数据,并希望在加载时应用填充,而不是写出预先填充的数据。