Keras Maxpooling2d Schicht gibt ValueError

Ich versuche, das VGG16-Modell in Keras zu replizieren. Dies ist mein Code:

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'))

Die Schicht maxpooling2d gibt einen Fehler in der Zeile aus, die mit @ kommentiert is

Der Fehler sagt:

ValueError: Negative dimension size caused by subtracting 2 from 1 for 'MaxPool_7' (op: 'MaxPool') with input shapes: [?,1,112,128].

Was könnte der Grund dafür sein? Wie kann man das lösen?

Bearbeiten: Ein ausführlicheres Fehlerprotokoll:

ValueError Traceback (letzter Aufruf zuletzt) in () 12 model.add (Convolution2D (128, 3, 3, activation = 'relu')) 13 ---> 14 model.add (MaxPooling2D ((2,2), Schritte = (2,2))) 15 16 model.add (ZeroPadding2D ((1,1)))

/ usr / local / lib / python2.7 / dist-packages / keras / models.pyc in add (self, layer) 306 output_shapes = [self.outputs [0] ._ keras_shape]) 307 else: -> 308 output_tensor = layer (self.outputs [0]) 309 wenn type (output_tensor) liste ist: 310 raise Exception ('Alle Layer in einem sequentiellen Modell'

/ usr / local / lib / python2.7 / dist-packages / keras / engine / topology.pyc inAnru (self, x, mask) 512 if inbound_layers: 513 # dies ruft bei Bedarf layer.build () auf -> 514 self.add_inbound_node (inbound_layers, node_indices, tensor_indices) 515 input_added = True 516

/ usr / local / lib / python2.7 / dist-packages / keras / engine / topology.pyc in add_inbound_node (self, inbound_layers, node_indices, tensor_indices) 570 # Beim Erstellen des Knotens werden self.inbound_nodes 571 # sowie outbound_nodes automatisch aktualisiert auf eingehenden Schichten. -> 572 Node.create_node (self, inbound_layers, node_indices, tensor_indices) 573 574 def get_output_shape_for (self, input_shape):

/ usr / local / lib / python2.7 / dist-packages / keras / engine / topology.pyc in create_node (cls, outbound_layer, inbound_layers, node_indices, tensor_indices) 147 148 if len (input_tensors) == 1: -> 149 output_tensors = to_list (outbound_layer.call (input_tensors [0], mask = input_masks [0]) 150 output_masks = to_list (outbound_layer.compute_mask (input_tensors [0], input_masks [0]) Form herleiten, wenn die Ausnahme von get_output_shape_for @ ausgelöst wi

/ usr / local / lib / python2.7 / dist-packages / keras / levels / pooling.pyc im Aufruf (self, x, mask) 160 Schritte = self.strides, 161 border_mode = self.border_mode, -> 162 dim_ordering = self.dim_ordering) 163 return output 164

/ usr / local / lib / python2.7 / dist-packages / keras / levels / pooling.pyc in _pooling_function (self, input, pool_size, strides, border_mode, dim_ordering) 210 border_mode, dim_ordering): 211 output = K.pool2d (eingaben, pool_size, schritte, -> 212 border_mode, dim_ordering, pool_mode = 'max') 213 return output 214

/ usr / local / lib / python2.7 / dist-packages / keras / backend / tensorflow_backend.pyc in pool2d (x, pool_size, strides, border_mode, dim_ordering, pool_mode) 1699 1700 wenn pool_mode == 'max': -> 1701 x = tf.nn.max_pool (x, pool_size, strides, padding = padding) 1702 elif pool_mode == 'avg': 1703
x = tf.nn.avg_pool (x, pool_size, strides, padding = padding)

/ usr / local / lib / python2.7 / dist-packages / tensorflow / python / ops / nn_ops.pyc in max_pool (Wert, ksize, Schritte, Auffüllen, Datenformat, Name) 1391 padding = padding, 1392
data_format = data_format, -> 1393 name = name) 1394 1395

/ usr / local / lib / python2.7 / dist-packages / tensorflow / python / ops / gen_nn_ops.pyc in _max_pool (Eingabe, ksize, Schritte, Auffüllen, Datenformat, Name)
1593 result = _op_def_lib.apply_op ("MaxPool", Eingabe = Eingabe, ksize = ksize, 1594 Schritte = Schritte, Auffüllen = Auffüllen, -> 1595 data_format = data_format, name = name) 1596 return result 1597

/ usr / local / lib / python2.7 / dist-packages / tensorflow / python / framework / op_def_library.pyc in apply_op (self, op_type_name, name, ** keyword) 747 op = g.create_op (op_type_name, input, output_types , name = scope, 748 input_types = input_types, attrs = attr_protos, -> 749 op_def = op_def) 750 output = op.outputs 751 return _Restructure (ops.convert_n_to_tensor (output),

/ usr / local / lib / python2.7 / dist-packages / tensorflow / python / framework / ops.pyc in create_op (self, op_type, eingaben, dtypes, input_types, name, attrs, op_def, compute_shapes, compute_device) 2388
original_op = self._default_original_op, op_def = op_def) 2389, wenn compute_shapes: -> 2390 set_shapes_for_outputs (ret) 2391 self._add_op (ret) 2392
self._record_op_seen_by_control_dependencies (ret)

/ usr / local / lib / python2.7 / dist-packages / tensorflow / python / framework / ops.pyc in set_shapes_for_outputs (o
% op.type) -> 1785 shapes = shape_func (op) 1786 falls shapes None ist: 1787 erhöhe RuntimeError

/ usr / local / lib / python2.7 / dist-packages / tensorflow / python / framework / common_shapes.pyc in call_cpp_shape_fn (op, input_tensors_needed, debug_python_shape_fn) 594 status) 595 mit Ausnahme von Fehlern ValueError (err.message) 597 598 # TensorShapeProto-Werte in output_shapes konvertieren.

ValueError: Negative Dimensionsgröße durch Subtrahieren von 2 von 1 für 'MaxPool_7' (op: 'MaxPool') mit Eingabeformen: [?, 1,112,128].

Antworten auf die Frage(12)

Ihre Antwort auf die Frage