我正在尝试在 keras 中复制 VGG16 模型,以下是我的代码:
model = Sequential()
model.add(ZeroPadding2D((1,1),input_shape=(3,224,224)))
model.add(Convolution2D(64, 3, 3, activation='relu'))
model.add(ZeroPadding2D((1,1)))
model.add(Convolution2D(64, 3, 3, activation='relu'))
model.add(MaxPooling2D((2,2), strides=(2,2)))
model.add(ZeroPadding2D((1,1)))
model.add(Convolution2D(128, 3, 3, activation='relu'))
model.add(ZeroPadding2D((1,1)))
model.add(Convolution2D(128, 3, 3, activation='relu'))
model.add(MaxPooling2D((2,2), strides=(2,2))) ###This line gives error
model.add(ZeroPadding2D((1,1)))
model.add(Convolution2D(256, 3, 3, activation='relu'))
model.add(ZeroPadding2D((1,1)))
model.add(Convolution2D(256, 3, 3, activation='relu'))
model.add(ZeroPadding2D((1,1)))
model.add(Convolution2D(256, 3, 3, activation='relu'))
model.add(MaxPooling2D((2,2), strides=(2,2)))
model.add(ZeroPadding2D((1,1)))
model.add(Convolution2D(512, 3, 3, activation='relu'))
model.add(ZeroPadding2D((1,1)))
model.add(Convolution2D(512, 3, 3, activation='relu'))
model.add(ZeroPadding2D((1,1)))
model.add(Convolution2D(512, 3, 3, activation='relu'))
model.add(MaxPooling2D((2,2), strides=(2,2)))
model.add(ZeroPadding2D((1,1)))
model.add(Convolution2D(512, 3, 3, activation='relu'))
model.add(ZeroPadding2D((1,1)))
model.add(Convolution2D(512, 3, 3, activation='relu'))
model.add(ZeroPadding2D((1,1)))
model.add(Convolution2D(512, 3, 3, activation='relu'))
model.add(MaxPooling2D((2,2), strides=(2,2)))
model.add(Flatten())
model.add(Dense(4096, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(4096, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(1000, activation='softmax'))
maxpooling2d 层在注释行给出错误
错误说:
ValueError: Negative dimension size caused by subtracting 2 from 1 for 'MaxPool_7' (op: 'MaxPool') with input shapes: [?,1,112,128].
这背后的原因可能是什么?怎么解决这个问题呢?
编辑:
更详细的错误日志:
ValueError Traceback(最近调用
最后)在()
12 model.add(Convolution2D(128, 3, 3, 激活='relu'))
13
---> 14 model.add(MaxPooling2D((2,2), strides=(2,2)))
15
16 model.add(ZeroPadding2D((1,1)))
/usr/local/lib/python2.7/dist-packages/keras/models.pyc 中的 add(self,
层)
[第 306 章]
第307章:
--> 308 输出张量 = 层(self.outputs[0])
[第 309 章]
310 raise Exception('顺序模型中的所有层'
/usr/local/lib/python2.7/dist-packages/keras/engine/topology.pyc 中call(自身,x,掩码)
第512章
第513章
--> 514 self.add_inbound_node(inbound_layers,node_indices,tensor_indices)
第515章
516
/usr/local/lib/python2.7/dist-packages/keras/engine/topology.pyc 中
add_inbound_node(自身,inbound_layers,node_indices,tensor_indices)
攀上漂亮女局长之后570
攀上漂亮女局长之后571
--> 572 Node.create_node(自身,inbound_layers,node_indices,tensor_indices)
第573章
第574章
/usr/local/lib/python2.7/dist-packages/keras/engine/topology.pyc 中
创建节点(cls,出站层,入站层,节点索引,
张量索引)
147
148 if len(input_tensors) == 1:
--> 149 output_tensors = to_list(outbound_layer.call(input_tensors[0], mask=input_masks[0]))
第150章
151 # TODO:如果 get_output_shape_for 引发异常,则尝试自动推断形状
/usr/local/lib/python2.7/dist-packages/keras/layers/pooling.pyc 中
调用(自身,x,掩码)
160 步=self.strides,
第161章
--> 162 dim_ordering=self.dim_ordering)
163 返回输出
164
/usr/local/lib/python2.7/dist-packages/keras/layers/pooling.pyc 中
_pooling_function(自身,输入,pool_size,步幅,border_mode,dim_ordering)
210 边界模式,暗淡排序):
[第 211 章]
--> 212 border_mode, dim_ordering, pool_mode='max')
213 返回输出
214
/usr/local/lib/python2.7/dist-packages/keras/backend/tensorflow_backend.pyc
在 pool2d(x, pool_size, 步幅, border_mode, dim_ordering, pool_mode) 中
第1699章【1700】
第1701章 1702 第1702章 1703
x = tf.nn.avg_pool(x, pool_size, 步幅, 填充=填充)
/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/nn_ops.pyc
在 max_pool(值,ksize,步幅,填充,data_format,名称)中 1391
填充=填充,1392
数据格式=数据格式,
-> 1393 姓名=姓名) 1394 1395
/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/gen_nn_ops.pyc
在 _max_pool(输入、ksize、步幅、填充、data_format、名称)
第1593章
ksize=ksize, 1594 步幅=步幅,
填充=填充,
-> 1595 data_format=data_format, name=name) 1596 返回结果 1597
/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/op_def_library.pyc
在 apply_op(self, op_type_name, 名称, **关键字)
第747章
第748章
--> 第 749 章
750 个输出 = op.outputs
第751章
/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.pyc
在 create_op(self, op_type, 输入, dtypes, input_types, 名称, attrs,
op_def、计算形状、计算设备)2388
第2389章
计算形状:
-> 2390 set_shapes_for_outputs(ret)2391 self._add_op(ret)2392
self._record_op_seen_by_control_dependency(ret)
/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.pyc
在 set_shapes_for_outputs(op) 1783 中引发 RuntimeError(“否
已为标准操作注册形状函数:%s”1784
% 操作类型)
第1785章 1786 第1786章 1787
/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/common_shapes.pyc
在 call_cpp_shape_fn(op, input_tensors_needed, debug_python_shape_fn) 中
594状态)
595 错误除外。InvalidArgumentError 为错误:
--> 596 引发 ValueError(err.message)
第597章
攀上漂亮女局长之后598
ValueError:从 1 减去 2 导致的负维度大小
'MaxPool_7'(操作:'MaxPool'),输入形状:[?,1,112,128]。