Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Scipy卷积2D不同于tensorflow conv2d_Python_Tensorflow_Scipy - Fatal编程技术网

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
则不会