Keras 2 ZeroPadding2D输出形状

时间:2018-01-24 03:22:39

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

我试图在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)))" to" model.add(keras.layers.ZeroPadding2D(padding =(0,0)))",因为我使用keras 2而不是像他的python日志中的keras 1.2,在模型中获取输出形状。 (None,1,2,128)的summary(),其中示例输出显示我应该得到的形状是(None,1,2,132)。这减少了所有后续输出形状,因为它是一个顺序模型,并略微减少了我的最终参数#。我已经倾听了Keras 2的文档,并尝试了一些修复,但无法看到我如何能够改变第四个索引输出形状,更不用说132而不改变输入到它的输出的Reshape层大小为132,但它应该保持1,2,128。

请温柔我是新来的NN! :)

2 个答案:

答案 0 :(得分:0)

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

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

如果你想保持相同的尺寸(无,1,2,132),你必须填充图像(通过传递'(0,2)'到填充层,正如在github上所做的那样)或在' conv1'之前执行一些其他操作。将你的张量扩大4个细胞的层

答案 1 :(得分:0)

@Kyle McClintick已通过替换此代码来解决此问题,如注释中所述

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

与此

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