加载模型后更改优化器或lr会产生奇怪的结果
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了加载模型后更改优化器或lr会产生奇怪的结果相关的知识,希望对你有一定的参考价值。
我正在使用最新的Keras和Tensorflow后端(Python 3.6)
当我上次训练时,我正在加载一个训练精度在86%左右的模型。
我使用的原始优化器是:
r_optimizer = optimizer=Adam(lr=0.0001, decay = .02)
model.compile(optimizer= r_optimizer,
loss='categorical_crossentropy', metrics = ['accuracy'])
如果我加载模型并继续训练而不重新编译,我的准确率将保持在86%左右(即使在10个左右的更多时期之后)。所以我想尝试改变学习率或优化器。
如果我重新编译模型并尝试更改学习速率或优化器,如下所示:
new_optimizer = optimizer=Adam(lr=0.001, decay = .02)
或者这个:
sgd = optimizers.SGD(lr= .0001)
然后编译:
model.compile(optimizer= new_optimizer ,
loss='categorical_crossentropy', metrics = ['accuracy'])
model.fit ....
准确度将重置为大约15% - 20%,而不是大约86%,我的损失会更高。即使我使用较小的学习率,并重新编译,我仍然会从非常低的准确度开始。从浏览互联网看起来像ADAM或RMSPROP这样的优化器在重新编译后重置权重有问题(目前找不到链接)
所以我做了一些挖掘并尝试重置我的优化器而不重新编译,如下所示:
model = load_model(load_path)
sgd = optimizers.SGD(lr=1.0) # very high for testing
model.optimizer = sgd #change optimizer
#fit for training
history =model.fit_generator(
train_gen,
steps_per_epoch = r_steps_per_epoch,
epochs = r_epochs,
validation_data=valid_gen,
validation_steps= np.ceil(len(valid_gen.filenames)/r_batch_size),
callbacks = callbacks,
shuffle= True,
verbose = 1)
但是,这些变化似乎没有反映在我的培训中。尽管显着提高了lr
,我仍然以同样的损失挣扎86%左右。在每个时代,我看到很少的损失或准确的运动。我预计损失将更加不稳定。这让我相信我的优化器和lr的变化没有被模型实现。
知道我可能做错了吗?
答案
我认为您的更改不会为优化器分配新的lr,并且我在Keras中加载模型后找到solution来重置lr值,希望它能帮到你。
以上是关于加载模型后更改优化器或lr会产生奇怪的结果的主要内容,如果未能解决你的问题,请参考以下文章
切换到特定片段会产生奇怪的 java.lang.NullPointerException
在视图大小更改时更改 UIView 阴影大小会产生奇怪的效果