Я занимаюсь трансферным обучением на предварительно обученной модели с собственным набором данных.Вскоре я использовал предварительно обученную модель resnet50 с входной формой 224x224.Я загружаю модель как:
train_datagen = ImageDataGenerator(validation_split=0.1,rescale=1./255,preprocessing_function=preprocess_input) # set validation split
img_size = 224
batch_size = 32
train_generator = train_datagen.flow_from_directory(
train_data_dir,
target_size=(img_size, img_size),
batch_size=batch_size,
color_mode='rgb',
subset='training') # set as training data
validation_generator = train_datagen.flow_from_directory(
train_data_dir, # same directory as training data
target_size=(img_size, img_size),
batch_size=batch_size,
color_mode='rgb',
subset='validation') # set as validation data
model = ResNet50(include_top=False, weights=None, input_shape=(224,224,3))
model.load_weights("a trained model weights on 224x224")
model.layers.pop()
for layer in model.layers:
layer.trainable = False
x = model.layers[-1].output
x = Flatten(name='flatten')(x)
x = Dropout(0.2)(x)
x = Dense(1024, activation='relu')(x)
predictions = Dense(101, activation='softmax', name='pred_age')(x)
top_model = Model(inputs=model.input, outputs=predictions)
top_model.compile(loss='categorical_crossentropy',
optimizer=adam,
metrics=[accuracy])
EPOCHS = 100
BATCH_SIZE = 32
STEPS_PER_EPOCH = 4424 // BATCH_SIZE
VALIDATION_STEPS = 466 // BATCH_SIZE
callbacks = [LearningRateScheduler(schedule=Schedule(EPOCHS, initial_lr=lr_rate)),
ModelCheckpoint(str(output_dir) + "/weights.{epoch:03d}-{val_loss:.3f}-{val_age_mae:.3f}.hdf5",
monitor="val_age_mae",
verbose=1,
save_best_only=False,
mode="min")
]
hist = top_model.fit_generator(generator=train_set,
epochs=100,
steps_per_epoch = 4424//32,
validation_data=val_set,
validation_steps = 466//32,
verbose=1,
callbacks=callbacks)
Всего параметров: 75 020 261 Обучаемых параметров: 51 432 549 Необучаемых параметров: 23 587 712
Эпоха 1/100 140/140 [==============================] - 1033 с 7 с / шаг - потеря:> 14.5776 - age_mae: 12.2994 - val_loss: 15.6144 - val_age_mae: 24.8527
Epoch 00001: val_age_mae улучшено с inf до 24.85268, сохраняя модель> Epoch 2/100 140/140 [=====================================] - 969 с 7 с / шаг - потеря: 14,7104 - age_mae: 11,2545 - val_loss: 15,6462 - val_age_mae: 25,1104
TEpoch 00002: val_age_mae не улучшилось с 24,85268 TEpoch 3/100 T140 /140 [==============================] - 769s 5 с / шаг - потеря:> T14.6159 - age_mae: 13.5181 -val_loss: 15.7551 - val_age_mae: 29.4640
эпоха 00003: val_age_mae не улучшается с 24.85268 эпохи 4/100 140/140 [==============================] - 815 с 6 с / шаг - потеря:> 14.6509 - age_mae: 13.0087 - val_loss: 15.9366 - val_age_mae: 18.3581 Эпоха 00004: val_age_mae улучшена fот 24.85268 до 18.35811 Epoch 5/100 140/140 [============================== - 1059 с 8 с / шаг - потеря:>> 14.3882 - age_mae: 11.8039 - val_loss: 15.6825 - val_age_mae: 24.6937
Эпоха 00005: val_age_mae не улучшалась с 18.35811 Эпоха 6/100 140/140 [==============================] - 1052 с 8 с / шаг - потеря:> 14.4496 - age_mae: 13.6652 - val_loss: 15.4278 - val_age_mae: 24.5045 Эпоха 00006: val_age_mae не улучшилось с18.35811
Я уже запускал эту пару раз, и после эпохи 4 он уже не улучшается.Также набор данных содержит около 5000 изображений.4511 изображений, принадлежащих обучающему набору.476 изображений, принадлежащих проверенному набору.
Я получаю следующий график потерь