【问题标题】:keras: load saved model weights in a model for evaluationkeras:在模型中加载保存的模型权重以进行评估
【发布时间】:2016-11-23 04:27:03
【问题描述】:

我完成模型训练处理。在训练期间,我使用 ModelCheckpint 通过以下方式保存最佳模型的权重:

checkpoint = ModelCheckpoint(filepath, monitor='val_acc', verbose=1, 
                         save_best_only=True, mode='max')

训练后,我将模型权重加载到模型中进行评估,但我发现该模型并未提供训练期间观察到的最佳准确度。我重新加载模型如下:

model.load_weights(filepath) #load saved weights
model = Sequential()
model.add(Convolution2D(32, 7, 7, input_shape=(3, 128, 128)))
....
....
model.compile(loss='categorical_crossentropy',
          optimizer=sgd,
          metrics=['accuracy'])

#evaluate the model
scores = model.evaluate_generator(test_generator,val_samples)
print("Accuracy = ", scores[1])

Modelcheckpoint保存的最高准确率约为85%,但重新编译的模型只给出了16%的准确率?

我做错了什么吗?

为了安全起见,有没有办法直接保存最好的模型而不是模型的权重?

【问题讨论】:

    标签: keras


    【解决方案1】:

    在编译模型后放置 model.load_weights(filepath) 可以解决问题!!

    但我仍然对在训练期间保存最佳模型感到好奇

    【讨论】:

    • 在训练期间保存最佳模型是什么意思?训练时模型不会改变|:如果您愿意,可以使用任何方式...您可以使用标志 save_weights_only = False 它将在每个时期保存模型...。您提醒了我我问的一个问题: stackoverflow.com/questions/48139494/…
    【解决方案2】:

    确保您使用的是经过训练的最佳模型的两个提示:

    将 val_acc 添加到文件名

    您可以像这样创建您的ModelCheckpoint

    checkpoint = ModelCheckpoint('my-model-{val_acc:.2f}.hdf5', monitor='val_acc', verbose=1, 
                         save_best_only=True, mode='max')
    

    这样,您将拥有多个文件,并且可以确保选择最佳模型。

    读取训练输出

    当您在拟合时查看 Keras 的输出时,您会看到:

    Epoch 000XX: val_acc improved from 0.8 to 0.85, saving model to my-model-0.85.hdf5
    

    【讨论】:

      【解决方案3】:

      假设您有一堆正在训练的数据,并且您决定只为最佳迭代保存权重。现在,如果您在找到“最佳”模型权重之前没有遍历所有数据,那么您将有效地丢弃数据,并且使用所谓的最佳权重进行的任何后续评估都不会与您的批量评估相关。

      【讨论】:

        猜你喜欢
        • 2019-03-20
        • 2019-05-20
        • 2021-08-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-28
        相关资源
        最近更新 更多