当前位置: 首页 > 面试题库 >

保存并加载模型优化器状态

赫连棋
2023-03-14
问题内容

我正在训练一组非常复杂的模型,我正在寻找一种保存和加载模型优化器状态的方法。“教练模型”由几个其他“权重模型”的不同组合组成,其中一些具有相同的权重,一些具有取决于教练的权重,等等。这个示例太过复杂,无法共享,但是总之,我不能够使用model.save('model_file.h5'),并keras.models.load_model('model_file.h5')停止和启动我训练的时候。

model.load_weights('weight_file.h5')如果训练完成,使用可以很好地测试我的模型,但是如果我尝试使用此方法继续训练模型,则损失甚至无法恢复到其最后位置。我已经读到这是因为使用这种方法没有保存优化器状态,​​这很有意义。但是,我需要一种用于保存和加载我的教练模型的优化器状态的方法。似乎keras曾经有一个,model.optimizer.get_sate()并且可以满足model.optimizer.set_sate()我的要求,但现在似乎不再如此了(至少对于Adam优化器而言)。当前的Keras还有其他解决方案吗?


问题答案:

您可以从load_modelsave_model函数中提取重要的行。

要保存优化器状态,​​请在save_model

# Save optimizer weights.
symbolic_weights = getattr(model.optimizer, 'weights')
if symbolic_weights:
    optimizer_weights_group = f.create_group('optimizer_weights')
    weight_values = K.batch_get_value(symbolic_weights)

要加载优化器状态,​​请参见load_model

# Set optimizer weights.
if 'optimizer_weights' in f:
    # Build train function (to get weight updates).
    if isinstance(model, Sequential):
        model.model._make_train_function()
    else:
        model._make_train_function()

    # ...

    try:
        model.optimizer.set_weights(optimizer_weight_values)

结合以上各行,这是一个示例:

  1. 首先将模型拟合5个时期。

    X, y = np.random.rand(100, 50), np.random.randint(2, size=100)
    x = Input((50,))
    out = Dense(1, activation=’sigmoid’)(x)
    model = Model(x, out)
    model.compile(optimizer=’adam’, loss=’binary_crossentropy’)
    model.fit(X, y, epochs=5)


    Epoch 1/5
    100/100 [==============================] - 0s 4ms/step - loss: 0.7716
    Epoch 2/5
    100/100 [==============================] - 0s 64us/step - loss: 0.7678
    Epoch 3/5
    100/100 [==============================] - 0s 82us/step - loss: 0.7665
    Epoch 4/5
    100/100 [==============================] - 0s 56us/step - loss: 0.7647
    Epoch 5/5
    100/100 [==============================] - 0s 76us/step - loss: 0.7638

  2. 现在保存权重和优化器状态。

    model.save_weights(‘weights.h5’)
    symbolic_weights = getattr(model.optimizer, ‘weights’)
    weight_values = K.batch_get_value(symbolic_weights)
    with open(‘optimizer.pkl’, ‘wb’) as f:
    pickle.dump(weight_values, f)

  3. 在另一个python会话中重建模型,并加载权重。

    x = Input((50,))
    out = Dense(1, activation=’sigmoid’)(x)
    model = Model(x, out)
    model.compile(optimizer=’adam’, loss=’binary_crossentropy’)

    model.load_weights(‘weights.h5’)
    model._make_train_function()
    with open(‘optimizer.pkl’, ‘rb’) as f:
    weight_values = pickle.load(f)
    model.optimizer.set_weights(weight_values)

  4. 继续进行模型训练。

    model.fit(X, y, epochs=5)

    Epoch 1/5
    100/100 [==============================] - 0s 674us/step - loss: 0.7629
    Epoch 2/5
    100/100 [==============================] - 0s 49us/step - loss: 0.7617
    Epoch 3/5
    100/100 [==============================] - 0s 49us/step - loss: 0.7611
    Epoch 4/5
    100/100 [==============================] - 0s 55us/step - loss: 0.7601
    Epoch 5/5
    100/100 [==============================] - 0s 49us/step - loss: 0.7594



 类似资料:
  • 译者 bruce1408 作者: Matthew Inkawhich 本文提供有关Pytorch模型保存和加载的各种用例的解决方案。您可以随意阅读整个文档,或者只是跳转到所需用例的代码部分。 当保存和加载模型时,有三个核心功能需要熟悉: torch.save: 将序列化对象保存到磁盘。 此函数使用 Python 的pickle模块进行序列化。使用此函数可以保存如模型、tensor、字典等各种对象。

  • This tutorial describes how to save and load models in TensorFlow.js. Saving and loading of models is an important capability. For example, how do you save the weights of a model fine-tuned by data on

  • 优化级别1:类映射生成 怎么运行它呢? 有几个选项可以启用此功能: 在 composer.json 的配置中设置 "optimize-autoloader": true 使用 -o / --optimize-autoloader 调用安装或更新 使用 -o / --optimize 调用 dump-autoload  它有什么作用? 类映射生成实质上是将 PSR-4/PSR-0 规则转换为类映射规

  • 我目前正在尝试确定使用GEKKO的氢气(H2)车辆加油过程的最佳流入条件。下面是耦合的常微分方程,用于控制H2和燃油箱壁的温度如何随加油时间变化。 哪里 这里,是储罐中H2的初始质量,是H2进入储罐的质量流量,是H2的比热比,是H2的流入温度,其他变量是中间变量/储罐参数。通过加油过程,被认为是恒定的(但未知),因此储罐中H2随时间的质量定义为: 此外,罐内H2的压力可以用真实的气体状态方程来计算

  • 问题内容: 我正在编写Django应用程序,它将获取特定URL的所有图像并将其保存在数据库中。 但是我没有在Django中使用ImageField。 Settings.py models.py download_img.py 我正在像这样的一个视图内调用download_imgs.py 问题答案: Django Documentation总是一个很好的起点 更新 因此,此脚本有效。 循环播放图片以

  • 性能与体验是前端的核心竞争力,是最直观反应页面是否好用、易用的标准。用户花在页面上的时间不应该是在等待页面加载和响应,而是使用和顺畅浏览的时间,因此如何提升页面性能和体验,让页面更快的可交互、浏览滚动更顺畅,是需要你持续的研究、优化、推进的。在 Rax 不断应用发展以及成熟的过程中,沉淀总结了一系列的性能体验的措施和最佳实践,通过这些,可以帮助你大幅提高页面的各项性能。 图片优化 图片占据着网页的