【问题标题】:Keras 2 ZeroPadding2D output shapeKeras 2 ZeroPadding2D 输出形状
【发布时间】:2018-01-24 03:22:39
【问题描述】:

我正在尝试在 python3.5 上复制 Tim O'shea 的 RadioML,然后再尝试使用它并一直在编辑他的公开代码:https://github.com/radioML/examples/blob/master/modulation_recognition/RML2016.10a_VTCNN2_example.ipynb

在第 [5] 页上,我已将“model.add(ZeroPadding2D((0, 2)))”行更改为“model.add(keras.layers.ZeroPadding2D(padding=(0, 0)))” ,因为我在他的 python 日志中使用 keras 2 而不是 keras 1.2,所以在 (None, 1, 2, 128) 的 model.summary() 期间获取输出形状,其中示例输出显示我应该得到的形状是 (None , 1, 2, 132)。这减少了所有后续输出形状,因为它是一个顺序模型,并略微减少了我的最终参数 #。我已经翻阅了 Keras 2 文档并尝试了一些修复,但根本看不到如何更改第 4 个索引输出形状,更不用说更改为 132,而无需将输入它的 Reshape 层输出大小更改为 132,但它应该保持为 1,2,128。

请温柔,我是 NN 的新手! :)

【问题讨论】:

    标签: python-3.x neural-network keras-2


    【解决方案1】:

    填充层在其输入张量的任一侧添加一个“0”行/列。您将填充层从 (0,2) 更改为 (0,0),因此它从在两侧填充 2 个单元格(总共 4 个)变为在两侧填充 0 个单元格(总共 0 个)。

    该层的输入具有形状 (None,1,2,128),因此当您将其填充 0 个单元格时,您根本不会更改它,并且仍然具有形状张量 (None, 1, 2, 128+0 = 128)。您链接的 github 页面的代码有一个带有参数 (0,2) 的填充层,这意味着它将 2 个单元格填充到其输入张量的任一侧,从而产生一个大小为 (None, 1, 2, 128+2) 的张量+2 = 132)。

    如果您想保持相同的尺寸(无、1、2、132),则必须填充图像(通过将 '(0,2)' 传递给填充层,就像在 github 上所做的那样) 或在“conv1”层之前执行一些其他操作,将张量扩大 4 个单元

    【讨论】:

    • 当我将 Zeropadding2D 层添加到顺序模型 model.add(keras.layers.ZeroPadding2D(padding=(0, 2))) 我在 model.summary() 中得到一个输出形状(ZeroPaddin (None, 1, 6, 128)。你解释的有道理,我谢谢你,但由于未知的原因,它没有给我正确的形状大小。事实上,在我绝望中,我没有输入任何填充值可以将 128 值更改为 128 以外的任何值。
    • 通过添加 data_format="channels_first" 作为参数,我现在得到了正确的图层形状,但我不确定为什么,因为对于 channels_last (默认)或首先是通道,高度的排序和填充的宽度是相同的:首先是高度,然后是宽度。如果它们是唯一的输入......为什么这会将 ZP 层的输出形状从 (none, 1, 6, 128) 更改为 (none, 1, 2, 132)?
    • @KyleMcClintick:这是因为channels_first 表示您的输入数据形状为(nExamples, channels, height, width)channels_last 表示形状为(nExamples, height, width, channels),其中通道指的是RGB 通道或您的案例是单通道。然后 padding=(0, 2) 中的两个数字告诉 Keras 在高度上填充 0 个像素,在左侧和右侧(宽度上)填充 2 个像素,并且您使用默认 channels_last 而您的数据实际上是 channels_first所以它错误地按以下顺序填充:(nExamples,height,width,channels)。
    【解决方案2】:

    @Kyle McClintick 在 cmets 中通过替换此代码已解决此问题

     model.add(ZeroPadding2D((0,2)))
    

    有了这个

     model.add(ZeroPadding2D(padding=(0,2),data_format="channels_first"))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-01
      • 2020-08-17
      • 1970-01-01
      • 2022-10-18
      • 2020-10-08
      • 2018-02-16
      相关资源
      最近更新 更多