'MaxPooling2D' object has no attribute 'op'

hey, I have "‘MaxPooling2D’ object has no attribute ’ op’ " error and the only maxpooling that I used is : {next_layer =tf.keras.layers.MaxPool2D()} and I just put pool_size=(2,2) as it was said, is more argument needed to put as input in the function?
thanks in advance.

Note that “MaxPooling2D” and “MaxPool2D” are totally different types of layers.

this is the written line:
next_layer = tf.keras.layers.MaxPooling2D(pool_size=(2,2))
and this is the error:
AttributeError Traceback (most recent call last)
in
3 inputs = Input(input_size)
4 cblock1 = conv_block(inputs, n_filters * 1)
----> 5 model1 = tf.keras.Model(inputs=inputs, outputs=cblock1)
6
7 output1 = [[‘InputLayer’, [(None, 96, 128, 3)], 0],

/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training.py in new(cls, *args, **kwargs)
240 # Functional model
241 from tensorflow.python.keras.engine import functional # pylint: disable=g-import-not-at-top
→ 242 return functional.Functional(*args, **kwargs)
243 else:
244 return super(Model, cls).new(cls, *args, **kwargs)

/usr/local/lib/python3.6/dist-packages/tensorflow/python/training/tracking/base.py in _method_wrapper(self, *args, **kwargs)
455 self._self_setattr_tracking = False # pylint: disable=protected-access
456 try:
→ 457 result = method(self, *args, **kwargs)
458 finally:
459 self._self_setattr_tracking = previous_value # pylint: disable=protected-access

/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/functional.py in init(self, inputs, outputs, name, trainable)
113 # ‘arguments during initialization. Got an unexpected argument:’)
114 super(Functional, self).init(name=name, trainable=trainable)
→ 115 self._init_graph_network(inputs, outputs)
116
117 @trackable.no_automatic_dependency_tracking

/usr/local/lib/python3.6/dist-packages/tensorflow/python/training/tracking/base.py in _method_wrapper(self, *args, **kwargs)
455 self._self_setattr_tracking = False # pylint: disable=protected-access
456 try:
→ 457 result = method(self, *args, **kwargs)
458 finally:
459 self._self_setattr_tracking = previous_value # pylint: disable=protected-access

/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/functional.py in _init_graph_network(self, inputs, outputs)
140
141 if any(not hasattr(tensor, ‘_keras_history’) for tensor in self.outputs):
→ 142 base_layer_utils.create_keras_history(self._nested_outputs)
143
144 self._validate_graph_inputs_and_outputs()

/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/base_layer_utils.py in create_keras_history(tensors)
189 the raw Tensorflow operations.
190 “”"
→ 191 _, created_layers = _create_keras_history_helper(tensors, set(), )
192 return created_layers
193

/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/base_layer_utils.py in _create_keras_history_helper(tensors, processed_ops, created_layers)
224 'op wrapping. Please wrap these ops in a Lambda layer: ’
225 ‘\n\n\n{example}\n\n’.format(example=example))
→ 226 op = tensor.op # The Op that created this Tensor.
227 if op not in processed_ops:
228 # Recursively set _keras_history.

AttributeError: ‘MaxPooling2D’ object has no attribute ‘op’

Which week number and assignment number are you working on?

I will not be able to reply further on this topic until tomorrow evening.

course 4, week 3, second programming assignment.
thanks anyway.

the only maxpooling that I used is : {next_layer =tf.keras.layers.MaxPool2D()}

You need to pass a data argument to the max pooling layer.
next_layer = MaxPooling2D((2,2))(conv)

And if you’re using curly-braces, don’t.

3 Likes

Here the next_layer = MaxPooling2D((2,2)) would be create an instance of the maxpooling layer.
Maxpooling2D((2,2))(conv) would create the layer and send the ouput in one go.
The keras functional API needs to understand how the input and output are related so you need to show it explicitly.

@reza1, Are you using colab or something else?