Python Scipy卷积2D不同于tensorflow conv2d
这是我的密码:Python Scipy卷积2D不同于tensorflow conv2d,python,tensorflow,scipy,Python,Tensorflow,Scipy,这是我的密码: import tensorflow as tf import numpy as np from scipy import signal img2 = np.array([ [10, 10, 10, 0, 0, 0], [10, 10, 10, 0, 0, 0], [10, 10, 10, 0, 0, 0], [10, 10, 10, 0, 0, 0], [10, 10, 10, 0, 0, 0], [10, 10, 10, 0,
import tensorflow as tf
import numpy as np
from scipy import signal
img2 = np.array([
[10, 10, 10, 0, 0, 0],
[10, 10, 10, 0, 0, 0],
[10, 10, 10, 0, 0, 0],
[10, 10, 10, 0, 0, 0],
[10, 10, 10, 0, 0, 0],
[10, 10, 10, 0, 0, 0]
]).astype(np.float32)
k = np.array([
[1., 0., -1.],
[1., 0., -1.],
[1., 0., -1.]
]).astype(np.float32)
img_tf = tf.constant(tf.reshape(img2, (1, 6, 6, 1)), dtype=tf.float32)
k_tf = tf.constant(tf.reshape(k, (3, 3, 1, 1)), dtype=tf.float32)
conv_tf = tf.nn.conv2d(img_tf, k_tf, strides=[1, 1], padding="SAME")[0, ..., 0]
print("conv_tf: " + str(conv_tf))
np_conv = np.array(signal.convolve2d(img2 , k, "same"), np.int32)
print("sp_conv:\n" + str(np_conv))
输出为:
conv_tf: tf.Tensor(
[[-20. 0. 20. 20. 0. 0.]
[-30. 0. 30. 30. 0. 0.]
[-30. 0. 30. 30. 0. 0.]
[-30. 0. 30. 30. 0. 0.]
[-30. 0. 30. 30. 0. 0.]
[-20. 0. 20. 20. 0. 0.]], shape=(6, 6), dtype=float32)
sp_conv:
[[ 20 0 -20 -20 0 0]
[ 30 0 -30 -30 0 0]
[ 30 0 -30 -30 0 0]
[ 30 0 -30 -30 0 0]
[ 30 0 -30 -30 0 0]
[ 20 0 -20 -20 0 0]]
现在,一条接缝与另一条接缝相反,为什么会有这种差异?最后,我找到了答案 问题是
scipy
进行数学上“正确”的卷积,而tensorflow
进行面向卷积神经网络(CNN)应用的卷积
因此,
scipy
在应用卷积之前反转内核(如解释的那样),而tensorflow
没有反转内核。最后,我找到了响应
问题是scipy
进行数学上“正确”的卷积,而tensorflow
进行面向卷积神经网络(CNN)应用的卷积
因此,scipy
在应用卷积(如所述)之前反转内核,而tensorflow
则不会