【问题标题】:regarding building the first input layer in VGG16 using Keras关于使用 Keras 在 VGG16 中构建第一个输入层
【发布时间】:2017-04-15 07:14:50
【问题描述】:

this blog中,作者包含了一个构建VGG16网络的代码段。我对代码的以下部分有一些疑问

model = Sequential()
model.add(ZeroPadding2D((1, 1), batch_input_shape=(1, 3, img_width, img_height)))
first_layer = model.layers[-1]
# this is a placeholder tensor that will contain our generated images
input_img = first_layer.input

model.add(ZeroPadding2D((1, 1), batch_input_shape=(1, 3, img_width, img_height)))相关,我们平时使用ZeroPadding2D构建第一层读取图像作为输入是不是一直都是这样? (1,1) 对输入表示什么 ZeroPadding2D的参数。根据Keras文档,表示我们对行和列都加1个零。如何决定要添加多少个零?

其次,为什么我们需要在first_layer = model.layers[-1]中设置-1?这里我们只有一层,应该是0吧?

【问题讨论】:

    标签: tensorflow deep-learning theano keras


    【解决方案1】:

    我们通常使用 ZeroPadding2D 构建第一层读取图像作为输入是否总是正确的?

    视情况而定。在这个特定的代码中,作者打算执行一个 3x3 卷积,输出具有与输入图像相同宽度和高度的图像特征。如果输入图像大小是 2 的幂,通常会出现这种情况,因为您希望保留 2x2 池化层的数量。

    没有填充:

    128x128 -[3x3 conv]-> 126x126 -[2x2 pool]-> 63x63 -[3x3 conv]-> 61x61 -> *how to pool next?*
    

    带内边距:

    128x128 -[pad 1]-> 130x130 -[3x3 conv]-> 128x128 -[2x2 pool]-> 64x64
    -[pad+conv+pool]-> 32x32 -[...]-> 16x16 -> 8x8 ...
    

    (1,1)对于ZeroPadding2D的输入参数表示什么?

    如果输入图像为 128*128,(1,1) 零填充将创建一个 130x130 的图像,添加一个 1 像素宽的黑框。 (1,1) 表示分别在水平/垂直边缘添加多少像素。

               o o o o o
    x x x      o x x x o
    x x x  ->  o x x x o
    x x x      o x x x o
               o o o o o
    

    如果您打算使用 5x5 卷积来保持图像尺寸,则需要 (2,2) 填充。

    为什么我们需要在 first_layer = model.layers[-1] 中设置 -1?

    可以使用精确索引。但是,如果有一天您决定在第一个卷积层下方添加一个预处理层,则无需更改 [-1] 索引,因为它始终提供最顶层。减少错误以防您忘记。

    【讨论】:

    • 感谢您非常详细的解释。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-28
    • 2019-11-09
    • 2017-07-08
    • 2021-07-28
    • 2018-05-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多