该模型尚未构建。首先通过调用 build() 或对一批数据调用模型来构建模型

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

增强层代码

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

函数内的模型块 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')])

这里model_name会调用上面的模型块

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)

执行以上代码时,显示以下错误:

---------------------------------------------------------------------------
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.

model.summary()抛出的错误。在调用 model.summary() 之前执行 model.build(input_shape=(x1, x2, x3))。当然你需要把input_shape替换成你想要的形状。