【问题标题】:Confusion regarding dimensions in CNN关于 CNN 维度的混淆
【发布时间】:2021-05-11 12:57:00
【问题描述】:

上面使用 Matlab 的深度学习工具箱生成的图片显示了为玩具示例创建的 CNN 的架构。输入图像大小为25*20*7,过滤器数量为15,每个大小为5*5,填充为same。第一个卷积conv1 的输出是25*20*15,它进入大小为2*2 的maxpooling 1 操作,步幅为1,填充为same

根据我的理解,maxpooling的作用是进行降维。但是,在我的代码中,因为填充设置为same,我知道maxpooling 的输出将保留其输入的空间维度,即25*20*15。这就是为什么 maxpooling1 的输出和 maxpooling 的其余部分与其输入具有相同的维度,并且其余层的维度没有变化。例如,maxpooling 的输出应该是:(25 - 2 +2*1/1) + 1 = 23+2/1 + 1 = 25。同样,对于第二维,maxpooling 将产生:(20 - 2 +2*1/1) + 1 = 18+2/1 + 1 = 20。因此,maxpooling 的输出应该是25*20*15

这意味着 maxpooling 没有进行降维。因此,如果填充选项设置为same,我应该删除maxpooling吗?

请让我知道在进行 maxpooling 后尺寸是如何相同的,如果尺寸相同,那么我应该删除此操作吗?还是我做错了什么?

【问题讨论】:

  • 您的问题与编程无关。使用 datascience.stackexchange.com 获取有关深度学习问题的帮助。
  • 好的,我已经把问题贴在那里了。

标签: python matlab deep-learning conv-neural-network


【解决方案1】:

tldr:如果您想在每一步都减小图像大小,请使用 padding=valid。这是默认选项。

Maxpooilign 一般用于下采样和减少过拟合。

如果你使用 padding='same',它会将图像拉伸到输入尺寸,不会导致尺寸下降。

在下面的示例中,输入大小为 4 * 4,池为 2*2,(默认)步幅为 2x2,因此输出为 2 * 2

在 keras'official site 上查找更多示例

【讨论】:

  • 感谢您的回答。如果 maxpooling 的填充保持same 不会导致维度发生变化,那么使用same 的这个选项有什么意义?我应该保留它还是删除它?
  • 是的,如果你的目标是减少维度,你应该使用'padding=valid'。 padding='same' 还有其他用例,但它不如 valid 受欢迎,这就是为什么 valid 是默认选项。
【解决方案2】:

对于卷积层和最大池化层,填充的作用是不同的。如果卷积层中的 padding=same,则意味着输出大小(主要是高度和宽度)与输入保持相同。 另一方面,池化层中的填充具有不同的功能。池化层的目的是减少空间维度(高度和宽度)。在池化层中,padding = same 并不意味着空间维度不变。当输入大小和内核大小不完全匹配时,需要在池中进行填充以弥补重叠。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-22
    • 1970-01-01
    • 1970-01-01
    • 2012-12-17
    • 1970-01-01
    • 2018-11-22
    • 2020-03-09
    • 2018-02-07
    相关资源
    最近更新 更多