在Tensorflow中堆叠不同长度的向量

问题描述 投票:2回答:1

如何在张量流中叠加不同长度的矢量,例如从

[1, 3, 5]
[2, 3, 9, 1, 1]
[6, 2]

得到零填充矩阵

[1, 3, 5, 0, 0]
[2, 3, 9, 1, 1]
[6, 2, 0, 0, 0]

向量计数在定义时已知,但它们的长度不是。使用tf.where(condition)产生载体

python tensorflow neural-network tensor zero-padding
1个回答
3
投票

你可以这样做的一种方法是:

In [11]: v1 = [1, 3, 5]
In [12]: v2 = [2, 3, 9, 1, 1]
In [14]: v3 = [6, 2]

In [38]: max_len = max(len(v1), len(v2), len(v3))
In [39]: pad1 = [[0, max_len-len(v1)]]
In [40]: pad2 = [[0, max_len-len(v2)]]
In [41]: pad3 = [[0, max_len-len(v3)]]

# pads 0 to original vectors up to `max_len` length
In [42]: v1_padded = tf.pad(v1, pad1, mode='CONSTANT')
In [43]: v2_padded = tf.pad(v2, pad2, mode='CONSTANT')
In [44]: v3_padded = tf.pad(v3, pad3, mode='CONSTANT')


In [53]: res = tf.stack([v1_padded, v2_padded, v3_padded], axis=0)

In [56]: res.eval()
Out[56]: 
array([[1, 3, 5, 0, 0],
       [2, 3, 9, 1, 1],
       [6, 2, 0, 0, 0]], dtype=int32)

为了使它能有效地使用N向量,您应该使用for循环为随后的所有向量和填充向量准备pad变量。并且,最后使用tf.stack沿着0th轴堆叠这些填充的向量,以获得所需的结果。


P.S。:一旦从tf.where(condition)获得矢量,就可以动态获得矢量的长度。

© www.soinside.com 2019 - 2024. All rights reserved.