【问题标题】:what actually model.save() saves in Keras?实际上 model.save() 在 Keras 中保存了什么?
【发布时间】:2019-11-18 12:57:07
【问题描述】:

我有一个 Keras 模型,我用 100 个 epoch 训练了这个模型。

现在,我在 85 时期损失了 0.0085,而在 lat 时期,我损失了 0.0092。

我的问题是,

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

keras model.save() 实际上是为了在 100 个 epoch 完成后保存权重而设计的?

感谢您提前解释:)。

【问题讨论】:

    标签: python keras deep-learning


    【解决方案1】:
    1. 它可以减轻重量
    2. 是的
    3. 为了节省最佳时期的权重,请使用我在下面给出的代码块
    4. 没有

    实际上 keras model.save() 是为了在 100 个 epoch 完成后保存权重而设计的?是的,但请查看以下代码,以仅保存最佳时期的权重。

    使用这段代码:

    1. 仅保存最佳时期的权重
    2. 仅当给定标准得到改进(val_loss 为最小值)时,才在每个 epoch 后更新权重
    3. 此外,每个 epoch 之后的历史记录将保存在 .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

    【讨论】:

    • 在 EarlyStopping 中耐心=10。这是什么意思?。这是否意味着例如让从 20 开始的模型直到 30 才减少损失。 30 纪元的权重被保存或 20 纪元被保存。
    【解决方案2】:

    我的问题是,model.save() 保存了什么,“它保存了权重吗? 它来自 lat epoch(即 100)”或“它是否保存了权重 最佳时期(即时期 85)”或“所有 100 个的平均或平均权重 时代”?。

    其他答案中已经提到了保存的所有内容(权重、优化器状态等)。在您的情况下,模型在 100 个时期结束时的权重被保存。

    如果您想保存最好的模型(损失最少),那么您需要创建一个ModelCheckPoint 回调对象并通过callbacks 参数将其传递给fit() 方法。

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

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

    【讨论】:

      【解决方案3】:

      model.save() 将保存有关您的 NN 的许多详细信息。最重要的细节是

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

      回到你问题的第二部分,当我们保存训练好的模型时,它会保存最后一个 epoch 之后的损失值。这意味着,根据您指定的 epoch 数量以及您与overfitting 的接近程度,最终值将比之前的 epoch 更少或更多。

      此外,根据 Keras 的创建者 Francois Chollet 的说法,epoch 的数量没有被保存,并且在大多数情况下没有意义。 see this conversation

      这是真的,除非您激活 callback 选项,该选项会在一定数量的 epoch(您称为最佳迭代)后提前停止网络训练。见this

      【讨论】:

        【解决方案4】:

        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

        【讨论】:

          猜你喜欢
          • 2015-07-03
          • 2011-01-17
          • 2018-10-13
          • 2017-04-28
          • 1970-01-01
          • 1970-01-01
          • 2013-06-02
          • 2020-11-21
          • 2015-02-26
          相关资源
          最近更新 更多