【发布时间】:2018-07-20 08:33:00
【问题描述】:
对于我的硕士论文,我目前正在将卷积运算从 Matlab 代码移植到 TensorFlow(Python API)。例外是在 Matlab 中使用了偶数 filter_size (6x6)。
通过调试 Matlab 的输出和我的 TensorFlow 代码,我认识到来自 Matlab 的函数 imfilter 的行为方式与 TensorFlow 中的 tf.nn.conv2d 操作不同。我得到的平均值和标准值不同,最小值和最大值相同。
我可以确认,我在 Matlab 和 TF 上的权重值是相同的,并且重新整形是正确的。 Bias 只是一个标量,所以这也不是问题。
我的假设是函数 imfilter (Matlab) 和 tf.nn.conv2d (TF) 不使用相同的中心像素进行卷积,因为奇数内核大小的输出是相似的。因此,对于奇数内核大小,两个函数的操作相似。
这是 Matlab 代码的 sn-p:
imfilter(input_data(:,:,j), conv_subfilter, 'same', 0, 'conv');
conv_subfilter 是一个 6x6x48 过滤器内核,正在卷积一个 Width x Heigth x 48 图像 - 结果是一个深度为 1 的图像,对于 TF 和 Matlab 而言
这是我的 TF 代码的 sn-p:
h_conv3_ip = convolution2d(max_pool_conv2, W_conv3_ip, b_conv3_ip, [1, 1, 1, 1], 'SAME', "h_conv3_ip")
def convolution2d(x, W, b, strides, padding, name):
conv2d = tf.nn.conv2d(x, W, strides=strides, padding=padding, name=name)
conv2d = tf.add(conv2d, b, name=name)
return conv2d
谁能告诉我内核中心是否是问题所在。别的? 提前感谢您的帮助!
【问题讨论】:
-
对于从 1 开始的索引,中心元素是
floor(N/2) + 1。 -
谢谢。我想这适用于 Matlab 中的函数 imfilter 。但是 TensorFlow 中内核的中心在哪里?
-
如果你让图像和滤镜都成为脉冲(值 1 嵌入零),你会得到什么?
标签: python matlab tensorflow deep-learning