你看到的问题是因为TF并没有真正计算卷积.如果您将看一下卷积实际执行的解释(检查卷积的视觉解释),您将看到第二个函数被翻转:
根据虚拟变量表示每个函数
反映其中一个功能(这是翻转)
.....其他一些我不会在这里复制的东西.
除了翻转之外,TF会做所有事情.所以你需要做的就是在TF或numpy中翻转内核.翻转1d情况只是内核以相反的顺序,2d你需要翻转两个轴(旋转内核2次).
import tensorflow as tf import numpy as np I = [1, 0, 2, 3, 0, 1, 1] K = [2, 1, 3] 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, 'VALID')) with tf.Session() as sess: print sess.run(res) print np.convolve(I, K[::-1], 'VALID')