【问题标题】:Tensorflow output from stride步幅的张量流输出
【发布时间】:2016-07-03 06:51:19
【问题描述】:

在尝试使用 Tensorflow 时,我遇到了一个关于步幅的小问题。

我有一个大小为 67*67 的图像,我想应用一个大小为 7*7 且步幅为 3 的过滤器。输出层的边长应为 20,计算公式如下:

其中 n 是输出层的边长(在本例中为 20)。计算方式如下:

如果我们只考虑第一行(因为其他行相同),那么在第一行的 67 个元素中,前 7 个将进入输出层的第一个单元格。然后过滤器向右移动 3 个元素,这使得过滤器覆盖元素 4 到 10,这将对应于输出层的第 2 个元素。以此类推。每次我们推进 3 个元素,我们将推进的总次数(计算它涵盖 7 个元素的第一步)是 n。因此我使用的等式。

但是,我从 Tensorflow 得到的输出层是 23,即 67/3 并四舍五入到下一个整数。我不明白这背后的原因。

有人能解释一下为什么在 Tensorflow 中会这样吗?

谢谢!

【问题讨论】:

    标签: filter tensorflow convolution conv-neural-network stride


    【解决方案1】:

    输出大小的计算方式有两种,具体取决于您使用的填充。如果您使用'SAME' 填充,则输出大小计算为:

    out_height = ceil(float(in_height) / float(strides[1]))
    out_width  = ceil(float(in_width) / float(strides[2]))
    

    'VALID' 一样,填充输出计算为:

    out_height = ceil(float(in_height - filter_height + 1) / float(strides[1]))
    out_width  = ceil(float(in_width - filter_width + 1) / float(strides[2]))
    

    您使用哪个来计算输出,但我们可以清楚地看到您必须使用 'SAME' 填充。

    所以在你的情况下你会得到:

    如果您实际使用 'VALID' 填充,则输出将更接近您的近似值。

    您可以阅读更多有关 tensorflow 如何计算特征图大小和填充的信息here.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-13
      • 1970-01-01
      • 1970-01-01
      • 2016-06-08
      • 2018-05-03
      • 2018-05-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多