我刚开始深入学习,做一些分类问题。
我在回调列表中使用了EarlyStopping和ModelCheckpoint,但是当训练开始时,模型检查点的基线是负无穷大,并覆盖'best_model.h5‘。
然而,“best_model.h5”已经存储了我上一个最好的型号。我希望将ModelCheckpoint的基线设置为我在数据上的上一个最佳模型的性能。
有谁可以帮我?
es = EarlyStopping(monitor='val_accuracy', mode='max', verbose=1, patience=3)
mc = ModelCheckpoint('best_model.h5', monitor='val_accuracy', mode='max', save_best_only=True, verbose=1)
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(x_train, y_train, validation_data=(x_valid, y_valid), batch_size=400,\
epochs=20, callbacks=[es, mc])发布于 2020-02-25 01:17:08
这样做:
mc = ModelCheckpoint('best_model-{epoch:04d}_{val_accuracy:.2f}.h5', monitor='val_accuracy', mode='max', save_best_only=True, verbose=1)这将节省您的新的最好的模型与epoch号码和validation_accuracy,而不覆盖best_model.h5。这将有助于您选择最好的模型并进行比较。
发布于 2020-02-25 01:41:11
我认为您的问题是希望在第一个时代之前保存val_acc --返回到一般机器学习问题的机制,我不认为第一次迭代之前的准确性值对比较是有意义的(您的模型还没有在给定的数据集上进行训练)。如果需要,可以检查验证损失(val_loss)。
但是,如果您想保存您的培训过程的日志,您不需要为每个时代保存模型。您可以将历史函数用作(导入matplotlib.pyplot作为plt)。
results = model.fit(x_train, y_train, validation_data=(x_valid, y_valid), batch_size=400,epochs=20, callbacks=[es, mc])
plt.figure(figsize=(8, 8))
plt.title("Learning curve")
plt.plot(results.history["loss"], label="loss")
plt.plot(results.history["val_loss"], label="val_loss")
plt.xlabel("Epochs")
plt.ylabel("Loss")
plt.legend()
plt.savefig('loss.png')
plt.figure(figsize=(8, 8))
plt.title("Learning curve")
plt.plot(results.history["acc"], label="accuracy")
plt.plot(results.history["val_acc"], label="accuracy")
plt.xlabel("Epochs")
plt.ylabel("Accuracy")
plt.legend()
plt.savefig('acc.png')https://stackoverflow.com/questions/60386178
复制相似问题