numpi 与 tensorflow 2.4 上的卷积

Convolution on numpi vs tensorflow 2.4

我是 Tensorflow 2.4 的新手,我有一个问题。

令 x = [3, 4, 5],‖h = [2, 1, 0]

使用 numpy 我得到

np.convolve(x, h) = [6, 11, 14, 5, 0]

但我不知道如何通过 tensorflow 2.4 做到这一点

如果您知道如何执行此操作并使用 numpy 获得相同的结果,那将非常有帮助。

虽然我认为这个问题主要是 的重复,但我可以使用那个问题来提出等效的脚本。

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 中没有等效项。