Tensorflow 关于使用Keras在VGG16中构建第一个输入层
在本文中,作者包含了构建VGG16网络的代码段。我对代码的以下部分有一些疑问Tensorflow 关于使用Keras在VGG16中构建第一个输入层,tensorflow,deep-learning,theano,keras,Tensorflow,Deep Learning,Theano,Keras,在本文中,作者包含了构建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_i
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\u input\u shape=(1,3,img\u width,img\u height))
,我们通常使用ZeroPadding2D
构建第一层读取图像作为输入,这是否总是正确的?(1,1)
为输入指示了什么
ZeroPadding2D
的参数。根据Keras文档,这意味着我们为行和列都添加了1个零。如何决定要加多少个零
其次,为什么我们需要在第一层=模型层[-1]
中设置-1
?这里我们只有一个层,它应该是0
我们通常使用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]
索引,因为它总是提供最顶层。如果您忘记了,请减少错误。谢谢您的详细解释。