model.save()在Keras中实际保存了什么?

时间:2019-07-09 02:29:39

标签: python keras deep-learning

我有一个Keras模型,并用100个时期训练了该模型。

现在,我在第85个时期损失了0.0085,而在以后的那个时候,我有了0.0092。

我的问题是

  1. Keras中的model.save()保存什么?
  2. 是否保存了经时(即100)获得的权重
  3. 还是从最佳纪元(即纪元85)保存权重
  4. 还是所有100个时期的平均或平均权重?。

真正的keras model.save()旨在在完成100个周期后保存权重吗?

感谢提前解释:)。

4 个答案:

答案 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的许多详细信息。最重要的细节是

  1. 网络的体系结构,包括维度(输入/输出层,隐藏层等)。
  2. 每一层中每个隐藏单元的权重矩阵和激活函数。 以及我们可能无需在此处概述的许多其他细节。

回到问题的第二部分,当我们保存训练好的模型时,它将在最后一个时期之后保存损失值。也就是说,最终值将比之前的时期少或多,具体取决于您指定的时期数以及与overfitting的距离。

根据Keras的创建者Francois Chollet的说法,纪元数没有保存,在大多数情况下没有意义。 see this conversation

这是正确的,除非您激活callback选项,该选项在一定数量的时期(您称之为最佳迭代)之后开启了网络训练的提前停止。参见this

答案 2 :(得分:2)

  

我的问题是,model.save()保存了什么,“它保存了权重吗?   它是从lat epoch(即100)得出的”或“是从   最佳纪元(例如,纪元85)“或”所有100的平均或平均权重   时代”?

所有答案都保存了什么(权重,优化器状态等),已在其他答案中提及。在您的情况下,将保存100个纪元末尾的模型权重。

如果要保存最好的模型(损失最少),则需要创建一个ModelCheckPoint回调对象,并将其通过{{1 }}参数。

https://keras.io/callbacks/#ModelCheckpoint

https://keras.io/callbacks/#example-model-checkpoints

答案 3 :(得分:1)

  1. 它可以减轻体重
  2. 为节省权重以获得最佳纪元,请使用我在下面给出的代码段

真正的keras model.save()旨在在完成100个周期后保存权重吗?是的,的确如此,但是请查看以下代码,以节省仅最佳时期的权重。

使用此代码段可以:

  1. 仅保存最佳时期的权重
  2. 仅在改善给定条件(val_loss为最小值)时,才在每个纪元后更新权重
  3. 此外,每个时期之后的历史记录将保存在.csv文件中。

代码

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)

链接:https://keras.io/callbacks/#ModelCheckpoint