I spotted weird problem with my script to train CNN model on Keras library. When I’m trying to learn simple CNN model during ending first epoch Keras throwing an error saying:
File “File.py”, line 86, in
generateModelForData(train_dataset, validation_dataset)
File “File.py”, line 44, in generateModelForData
model.fit(train_dataset, batch_size=1, epochs=1000, verbose=1, validation_data=validation_dataset, callbacks=[my_callbacks])
File “.local/lib/python3.10/site-packages/keras/src/utils/traceback_utils.py”, line 122, in error_handler
raise e.with_traceback(filtered_tb) from None
File “.local/lib/python3.10/site-packages/keras/src/utils/tree.py”, line 236, in map_structure
raise ValueError(“Must provide at least one structure”)
ValueError: Must provide at least one structure
My model looks like that:
model = Sequential()
model.add(Conv2D(8, (3, 3), activation='relu', input_shape=[32, 128, 3]))
model.add(BatchNormalization())
model.add(MaxPooling2D(2, 2))
model.add(Conv2D(8, (3, 3), activation="relu"))
model.add(MaxPooling2D(2, 2))
model.add(Flatten())
model.add(Dense(250, activation="relu"))
model.add(BatchNormalization())
model.add(Dense(120, activation="relu"))
model.add(Dense(50, activation="relu"))
model.add(Dense(1, activation="sigmoid", name="output_layer"))
optimizer = keras.optimizers.Adam(learning_rate=1e-4)
#
checkpoint_filepath = '/tmp/checkpoint'
model_checkpoint_callback = ModelCheckpoint(
filepath=checkpoint_filepath,
save_weights_only=True,
monitor='val_accuracy',
mode='max',
save_best_only=True)
#
model.compile(optimizer=optimizer, loss='binary_crossentropy', metrics=['accuracy', Precision(), Recall(), AUC()])
my_callbacks = [EarlyStopping(monitor='accuracy', patience=10, mode='max'), model_checkpoint_callback]
#
model.summary()
model.fit(train_dataset, batch_size=1, epochs=1000, verbose=1, validation_data=validation_dataset, callbacks=[my_callbacks])
Datasets is generated in that way:
image_generator = ImageDataGenerator(rescale=1/255)
train_dataset = image_generator.flow_from_directory(batch_size=5,
directory='new_heatmaps/train',
shuffle=True,
target_size=(32, 128),
subset="training",
class_mode='binary')
validation_dataset = image_generator.flow_from_directory(batch_size=5,
directory='new_heatmaps/test',
shuffle=True,
target_size=(32, 128),
subset="validation",
class_mode='binary')
What could be the cause of this structure error? When Keras throw some kind of error?