This model has not yet been built. Build the model first by calling `build()` or by calling the model on a batch of data

Question:

Code for augmentation layer

data_augmentation = tf.keras.Sequential([
layers.RandomFlip('horizontal'),
layers.RandomRotation(0.2),
])

Model block inside function get_model(model_name, droput_rate):

model = tf.keras.Sequential([
        data_augmentation,
        layers.Conv3D(64, (5, 5, 5), padding='same', activation='relu', input_shape=(22, 64, 64, 1)),
        layers.BatchNormalization(),
        layers.MaxPooling3D(pool_size=(3, 3, 3)),
        layers.Dropout(dropout_rate),
        layers.Conv3D(128, (5, 5, 5), padding='same', activation='relu'),
        layers.Conv3D(128, (5, 5, 5), padding='same', activation='relu'),
        layers.BatchNormalization(),
        layers.MaxPooling3D(pool_size=(3, 3, 3)),
        layers.Dropout(dropout_rate),
        layers.GlobalMaxPool2D(),
        layers.Dense(10, activation='softmax')])

Here model_name will call the above model block

opt = tf.keras.optimizers.SGD(learning_rate=0.001)
model = get_model(model_name, 0.5)
model.compile(loss='categorical_crossentropy', optimizer=opt, metrics=['accuracy'])
model_json = model.to_json()
with open(models_dir + model_name + ".json", "w") as json_file:
    json_file.write(model_json)

# plot the model architecture
model.summary()
plot_model(model, to_file='/content/gdrive/MyDrive/Lip Reading/outputs/architecture_{}.pdf'.format(model_name), show_shapes=True, show_layer_names=False)

When above code is executed below errors are shown:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-166-57c956c1a8c7> in <module>()
      4 
      5 # plot the model architecture
----> 6 model.summary()
      7 plot_model(model, to_file='/content/gdrive/MyDrive/Lip Reading/outputs/architecture_{}.pdf'.format(model_name), show_shapes=True, show_layer_names=False)

/usr/local/lib/python3.7/dist-packages/keras/engine/training.py in summary(self, line_length, positions, print_fn, expand_nested, show_trainable)
   2774     if not self.built:
   2775       raise ValueError(
-> 2776           'This model has not yet been built. '
   2777           'Build the model first by calling `build()` or by calling '
   2778           'the model on a batch of data.')

ValueError: This model has not yet been built. Build the model first by calling `build()` or by calling the model on a batch of data.

Answers:

It is model.summary() that throws the error. Do model.build(input_shape=(x1, x2, x3)) before calling model.summary(). Of course you need to replace input_shape with the desired shape.

Answered By: Sam Ngugi

Adding the below line to the model worked for me.

tf.keras.Input(shape=(input_shape,)),

Here is the code snippet:

tf.random.set_seed(1234)
model = Sequential(
[               
    tf.keras.Input(shape=(100,)),    #specify input shape
    Dense(25, activation = 'relu'),
    Dense(15, activation = 'linear')        

], name = "model_y" 
)
Answered By: Ndheti
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.