凯拉斯继续接受新建筑的培训

2024-04-25 20:38:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试在对一个简单的NN架构进行修改之后恢复它的训练。 使用MNIST数据集,在本例中,我为2个时期训练模型,然后将模型保存在.h5文件中。然后重新加载模型,修改模型并重新编译。但我想在我停止训练的地方继续训练。所以我想使用重新加载的模型的优化器继续训练。代码如下:

MLP = keras.models.Sequential([
        keras.layers.Dense(100, activation='sigmoid', input_shape=(784,)),
        keras.layers.Dense(10, activation='softmax')
    ])
MLP.compile(optimizer=tf.keras.optimizers.Adam(lr=0.5), loss=tf.losses.log_loss, metrics=['accuracy'])
training_output = MLP.fit(x_train, y_train, epochs=2, validation_data=(x_val, y_val), verbose=2, initial_epoch=0)

MLP.save('test.h5')



MLP = keras.models.load_model('test.h5', custom_objects={'log_loss': log_loss})
modelt = MLP
modelt = # update modelt architecture


modelt.compile(optimizer=MLP.optimizer, loss=tf.losses.log_loss, metrics=['accuracy'])
training_output = modelt.fit(x_train, y_train, epochs=4, validation_data=(x_val, y_val), verbose=2, initial_epoch=2)

问题是:

Epoch 1/2

 - 1s - loss: 1.2690 - acc: 0.2216 - val_loss: 1.3097 - val_acc: 0.2095

Epoch 2/2

 - 1s - loss: 1.2859 - acc: 0.2030 - val_loss: 1.2420 - val_acc: 0.1760

Epoch 3/4

 - 1s - loss: 2.8945 - acc: 0.0993 - val_loss: 2.9367 - val_acc: 0.0890

Epoch 4/4

 - 1s - loss: 2.9035 - acc: 0.0993 - val_loss: 2.9367 - val_acc: 0.0890

训练仍然是某种程度上卡住或更糟。如何解决此问题?即使尝试实例化一个新的Adam优化器对象并重置我可以触及的所有值,行为也不会改变。重用重新加载的优化器的正确步骤是什么?你知道吗

非常感谢你的帮助!你知道吗

编辑: 模型的简单保存和重新加载将返回以下结果:

lr begin: 0.15811755
begin: [0.35258077597618104, 0.1265]
lr end: 0.25961164
end: [1.0754492826461792, 0.2785]
-------------------------------------------------------------
lr begin: 0.25961164
begin: [1.0754492826461792, 0.2785]
lr end: 0.34131044
end: [1.5968322057723998, 0.2185]
-------------------------------------------------------------
lr begin: 0.34131044
begin: [1.5968322057723998, 0.2185]
lr end: 0.3903688
end: [2.8819153175354004, 0.106]
-------------------------------------------------------------
lr begin: 0.3903688
begin: [2.8819153175354004, 0.106]
lr end: 0.42264876
end: [2.8819153175354004, 0.106]

Tags: 模型logtrainvalkerasoptimizerendacc
1条回答
网友
1楼 · 发布于 2024-04-25 20:38:46

我进入聊天室与@TheNobleSix讨论这个问题,并在那里找到了答案,但他没有在那里反馈我。所以,我在这里写它是为了帮助其他用户将来可能遇到的类似问题。


当重新加载模型时,您不应该像Keras documentation中描述的那样重新编译模型!这会导致优化器失去其以前的状态。这就是当你试图按照评论中的建议单独完成任务的每一部分时所发生的事情。你知道吗

记住这一点,根据您希望在模型中进行的修改,可能不适合在同一点继续训练,或者很难从相同的损失/精度值调整更新后的模型以继续训练。因此,参数数目的改变可能会极大地改变目标函数。例如,如果更改层中的神经元数量或添加新层,则需要初始化新神经元。一个可能的解决方法是在神经元之间重新分配层权重(如果是第一种情况的话)。这样做的结果是丢失了该层已经识别的可能模式。你知道吗

我知道上一段很有推测性。如果您描述了您在体系结构中所做的具体修改,我可以尝试给您一个关于模型更新部分的更精确的答案。你知道吗

相关问题 更多 >