我有一个Keras模型,并用100个时期训练了该模型。
现在,我在第85个时期损失了0.0085,而在以后的那个时候,我有了0.0092。
我的问题是
真正的keras model.save()旨在在完成100个周期后保存权重吗?
感谢提前解释:)。
答案 0 :(得分:2)
model.save()
保存了整个体系结构,权重和优化器状态。此命令将保存重构模型所需的详细信息。
该命令将保存:
因此,您可以使用keras.models.load_model(filepath)
重用模型来重新实例化模型。 load_model
还将负责使用保存的训练配置来编译模型。
查看示例:
from keras.models import load_model
model.save('my_model.h5') # creates a HDF5 file 'my_model.h5'
del model # deletes the existing model
# returns a compiled model
# identical to the previous one
model = load_model('my_model.h5')
来源:https://keras.io/getting-started/faq/#how-can-i-save-a-keras-model
答案 1 :(得分:2)
model.save()
将保存有关您的NN的许多详细信息。最重要的细节是
回到问题的第二部分,当我们保存训练好的模型时,它将在最后一个时期之后保存损失值。也就是说,最终值将比之前的时期少或多,具体取决于您指定的时期数以及与overfitting
的距离。
根据Keras
的创建者Francois Chollet的说法,纪元数没有保存,在大多数情况下没有意义。 see this conversation
这是正确的,除非您激活callback
选项,该选项在一定数量的时期(您称之为最佳迭代)之后开启了网络训练的提前停止。参见this
答案 2 :(得分:2)
我的问题是,model.save()保存了什么,“它保存了权重吗? 它是从lat epoch(即100)得出的”或“是从 最佳纪元(例如,纪元85)“或”所有100的平均或平均权重 时代”?
所有答案都保存了什么(权重,优化器状态等),已在其他答案中提及。在您的情况下,将保存100个纪元末尾的模型权重。
如果要保存最好的模型(损失最少),则需要创建一个ModelCheckPoint
回调对象,并将其通过{{1 }}参数。
答案 3 :(得分:1)
真正的keras model.save()旨在在完成100个周期后保存权重吗?是的,的确如此,但是请查看以下代码,以节省仅最佳时期的权重。
使用此代码段可以:
import pandas as pd
from keras.callbacks import EarlyStopping, ModelCheckpoint
#Stop when val_loss is not decreasing
earlyStopping = EarlyStopping(monitor='val_loss', patience=10, verbose=0, mode='min')
#Save the model after every epoch.
checkpointer = ModelCheckpoint(filepath='Model_1_weights.h5', verbose=1, save_best_only=True)
#history variable will save training progress after each epoch
history = model.fit(X_train, y_train, batch_size=20, epochs=40, validation_data=(X_valid, y_valid), shuffle=True, callbacks=[checkpointer, earlyStopping])
#Save progress of each epoch in .csv file
hist_df = pd.DataFrame(history.history)
hist_csv_file = 'History_Model_1.csv'
with open(hist_csv_file, mode='w') as f:
hist_df.to_csv(f)