Я заметил, что если я сохраняю и запускаю свою модель, я получаю разную точность на разных уровнях процесса. Первый шаг, если точность, сообщаемая моделью в точке сохранения.
Сначала я запускаю свою модель следующим образом:
resnet_model.fit(inputs,
train_labels_encoded,
batch_size=1,
epochs=300,
validation_data = valid_data,
verbose=1,
callbacks=callback_list)
В списке обратных вызовов у меня есть ранняя остановка, связанная с потерей. и контрольная точка сохранения
filepath="weights.best.hdf5"
checkpoint = ModelCheckpoint(filepath, monitor='loss', verbose=1, save_best_only=True, mode='auto')
early_stop = EarlyStopping(monitor='loss', patience=5, min_delta=0.006, mode='auto')
callback_list=[checkpoint, early_stop]
Модель работает нормально, и последняя контрольная точка сохранения выглядит следующим образом:
Epoch 19/300
233/234 [============================>.] - ETA: 0s - loss: 1.1034 - accuracy: 0.7639
Epoch 00019: loss improved from 1.36219 to 1.10096, saving model to weights.best.hdf5
Я хотел точно определить, где модель неправильно прогнозировала. Поэтому я ожидаю, что, если я буду выполнять прогнозы с использованием моей модели на входах обучения, я получу точность 0,7639. Поэтому я загружаю модель и запускаю этот код
loaded_model = load_model("weights.best.hdf5")
pred_train = inputs
predictions_train = loaded_model.predict(pred_train, verbose=1)
correct = 0
for i in range(int(len(predictions_train))):
pred = predictions_train[i].argmax()
gold = train_labels_encoded[i].argmax()
print(pred, gold)
if pred == gold:
correct += 1
print("CORRECT", i)
print(correct/234)
К сожалению, после этого я получаю точность обучения 0,333. Я сделал что-то не так в коде в конце, который перепроверяет точность обучения? Я почти уверен, что не перепутал никаких переменных. Есть ли что-то в загрузке модели, которая может вызвать это?