虽然我认为这个问题主要是与this question 的重复,但我可以使用该问题提出一个等效的脚本。
import tensorflow as tf
import numpy as np
I = [3, 4, 5]
K = [2, 1, 0]
I = [0] + I + [0]
i = tf.constant(I, dtype=tf.float32, name='i')
k = tf.constant(K, dtype=tf.float32, name='k')
data = tf.reshape(i, [1, int(i.shape[0]), 1], name='data')
kernel = tf.reshape(k, [int(k.shape[0]), 1, 1], name='kernel')
res = tf.squeeze(tf.nn.conv1d(data, kernel[::-1], 1, 'SAME'))
print(res)
print(np.convolve(I, K, 'SAME'))
tf.Tensor([ 6. 11. 14. 5. 0.], shape=(5,), dtype=float32)
[6 11 14 5 0]
在您的情况下,他们的关键是了解 tensorflow 和 numpy 如何处理填充。虽然链接的问题很好地解释了这一点,但我还要注意full 的默认np.convolve 填充在tensorflow conv 1d 中没有等效项。