3天带你玩转Python深度学习老师讲解一个重要知识点可能错误,那就是关于卷积核池化输入和输出计算问题,padding=SAME时候输入和输出大小并不一定是一样的,但是里面讲解老师说padding=SAME输出和输入图像大小一样,这个证明是错的。老师说公式是
(输入大小-卷积核大小+2xpadding)/strides=输出大小,这个似乎有些问题,经过实际证明和谷歌提供的文档,应该是padding=SAME时候输出大小=Math.Ceil(输入大小/strides),而padding=Valid时候,输出大小为Math.ceil(输入大小-卷积核大小+1)/strides,不知道是不是我理解有问题呢,我通过代码查看应该我提供两个公式,而不是(输入大小-卷积核大小+2xpadding)/strides=输出大小,比如以下代码
import tensorflow as tf
input = tf.Variable(tf.random_normal([1, 5, 5, 3]))
filter = tf.Variable(tf.random_normal([3, 3, 3, 7]))
result = tf.nn.conv2d(input, filter, strides=[1, 2, 2, 1], padding="SAME")
init = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init)
# print(sess.run(result))
print(result.shape)
大家可以看看输入和输出实际不一样。先前我看了视频,我也深信不疑在padding=SAME输出和输入图像大小一样,但是偶然间看到很多人使用Math.Ceil(输入大小/strides)这个公式,我才开始怀疑,经过代码证明,(输入大小-卷积核大小+2xpadding)/strides=输出大小存在一些问题,希望这方面大牛出来解答一下,到底哪个公式才是正确的,以免后续计算错误