python - Tensorflow中不同长度的堆栈向量

标签 python tensorflow neural-network tensor zero-padding

如何在 tensorflow 中堆叠不同长度的向量,例如来自

[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)

生成的

最佳答案

执行此操作的一种方法是:

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 沿第 0 轴堆叠这些填充向量以获得所需的结果。


P.S.:从tf.where(condition)获得向量后,您可以动态获取向量的长度。

关于python - Tensorflow中不同长度的堆栈向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47003318/

相关文章:

python - 如何使用 Python OpenCV 确定内部轮廓和外部轮廓?

python - 如何安装tensorflow-gpu==1.11.0

python - 基于变量的Tensorflow切片

machine-learning - 所有机器学习算法都使用词频作为特征吗?

python - 如何将多行代码用于 else 语句?

python - 在 NiFi 中取消透视 csv 并将其摄取到 sql server 中

java - 通过神经网络和/或强化学习提升我的遗传算法

python - 训练 DQN 时 Q 值爆炸

python - Python 有没有模拟键盘操作的库?

numpy - 使用 numpy 和 tensorflow 将原始 CIFAR-10 转换为 CNN 输入