use*_*099 2 theano deep-learning keras tensorflow
在这篇博客中,作者包含了一个代码段来构建 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
Run Code Online (Sandbox Code Playgroud)
与 相关model.add(ZeroPadding2D((1, 1), batch_input_shape=(1, 3, img_width, img_height))),我们通常使用ZeroPadding2D构建第一层读取图像作为输入总是正确的吗?什么(1,1)表示ZeroPadding2D..的输入参数根据Keras文档,这意味着我们为行和列都添加了1个零。如何决定添加多少个零?
其次,为什么我们需要设置-1的 first_layer = model.layers[-1]?这里我们只有一层,应该0改为吗?
我们通常使用 ZeroPadding2D 来构建第一层读取图像作为输入是真的吗?
要看。在这个特定的代码中,作者打算执行一个 3x3 卷积,输出与输入图像具有相同宽度和高度的图像特征。如果输入图像大小是 2 的幂,则通常会出现这种情况,因为您希望保留 2x2 池化层的数量。
无填充:
128x128 -[3x3 conv]-> 126x126 -[2x2 pool]-> 63x63 -[3x3 conv]-> 61x61 -> *how to pool next?*
Run Code Online (Sandbox Code Playgroud)
带填充:
128x128 -[pad 1]-> 130x130 -[3x3 conv]-> 128x128 -[2x2 pool]-> 64x64
-[pad+conv+pool]-> 32x32 -[...]-> 16x16 -> 8x8 ...
Run Code Online (Sandbox Code Playgroud)
ZeroPadding2D 的输入参数 (1,1) 表示什么?
如果输入图像是 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
Run Code Online (Sandbox Code Playgroud)
如果您打算使用 5x5 卷积保持图像尺寸,则需要(2,2)填充。
为什么我们需要在 first_layer = model.layers[-1] 中设置 -1?
可以使用精确索引。然而,如果有一天你决定在第一个卷积层下面添加一个预处理层,你不需要更改[-1]索引,因为它总是给出最顶层。减少错误,以防您忘记。
| 归档时间: |
|
| 查看次数: |
910 次 |
| 最近记录: |