C4 W1 A2:Module AttributeError: The layer has never been called and thus has no defined output shape

In Exercise 1 HappyModel

I tried following TensorFlow Keras 2.9.1 documentation and added layers using 1) adding layers directly in constructor , or 2) use model.add() method, but at testing both methods I got the error from the grader

AttributeError Traceback (most recent call last)
in
1 happy_model = happyModel()
2 # Print a summary for each layer
----> 3 for layer in summary(happy_model):
4 print(layer)
5

~/work/release/W1A2/test_utils.py in summary(model)
30 result =
31 for layer in model.layers:
—> 32 descriptors = [layer.class.name, layer.output_shape, layer.count_params()]
33 if (type(layer) == Conv2D):
34 descriptors.append(layer.padding)

/opt/conda/lib/python3.7/site-packages/tensorflow/python/keras/engine/base_layer.py in output_shape(self)
2177 “”"
2178 if not self._inbound_nodes:
→ 2179 raise AttributeError('The layer has never been called ’
2180 ‘and thus has no defined output shape.’)
2181 all_output_shapes = set(

AttributeError: The layer has never been called and thus has no defined output shape.

I need help to understand why the grader does not see the layer I added.

My lab ID is mahftzaa

2 Likes

Solution: Found the way to add input shape into Tensorflow layer class.

Tensorflow documentation does not document the supported attribute of input_shape.

4 Likes

Problem now fixed

[‘ZeroPadding2D’, (None, 70, 70, 3), 0, ((3, 3), (3, 3))]
[‘Conv2D’, (None, 64, 64, 32), 4736, ‘valid’, ‘linear’, ‘GlorotUniform’]
[‘BatchNormalization’, (None, 64, 64, 32), 128]
[‘ReLU’, (None, 64, 64, 32), 0]
[‘MaxPooling2D’, (None, 32, 32, 32), 0, (2, 2), (2, 2), ‘valid’]
[‘Flatten’, (None, 32768), 0]
[‘Dense’, (None, 1), 32769, ‘sigmoid’]
All tests passed!

Great to hear that you find the solution !

Regarding input_shape, Keras documents describe it. Here is the link.

And, one thing which may be useful to know is,.
All tensorflow layers such as ZeroPadding2D, Conv2D, … inherit tf.keras.layers.Layer.
So, everything is there.

Hope this helps some.

1 Like

Hi Nobu

Yes, hints are most helpful. I will note the difference between Keras and the Tensorflow layers using Keras API and always check the Keras manual first for any Kera specific options.

Nelson

So, how did you add input shape to tfl.ZeroPadding2D?

Thanks

@Alex_Tu: You’ve added your reply to a thread that has been cold for two years. Usually it’s better to start a new thread for your question.

= = = = =
The ZeroPadding2D(…) layer can accept an input_shape = (...) parameter. You have to provide the desired shape as a tuple.