Exercise 2 - alpaca_model error

Hi all,

I am getting an error as below, can anyone give me a hint?

AttributeError                            Traceback (most recent call last)
<ipython-input-59-11ffc7a7acb3> in <module>
----> 1 model2 = alpaca_model(IMG_SIZE, data_augmentation)

<ipython-input-58-42d847e26d28> in alpaca_model(image_shape, data_augmentation)
     46     ### END CODE HERE
     47 
---> 48     model = tf.keras.Model(inputs, outputs)
     49 
     50     return model

/opt/conda/lib/python3.7/site-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)

/opt/conda/lib/python3.7/site-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

/opt/conda/lib/python3.7/site-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

/opt/conda/lib/python3.7/site-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

/opt/conda/lib/python3.7/site-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()

/opt/conda/lib/python3.7/site-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 

/opt/conda/lib/python3.7/site-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: 'Dense' object has no attribute 'op'

It looks like you specified the Dense layer incorrectly. But that’s the very last layer in the model, so you must have gotten the previous layers correct. The Dense layer should look the same way as the previous layers. Everything in the Keras Functional API is done in two steps:

  1. You call the “layer” function with the parameters you are want (number of output units in this case). That gives you back a function.
  2. Then you call (“invoke”) that function with the appropriate input tensor.

So there are two sets of parens in each line. I’m guessing you’ve only got one or maybe you tried to invoke Dense with a “method” instead of just invoking the returned function in Step 2 above.

1 Like