加载模型后更改优化器或lr会产生奇怪的结果

问题描述 投票:0回答:1

我正在使用最新的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的变化没有被模型实现。

知道我可能做错了吗?

python tensorflow neural-network keras deep-learning
1个回答
1
投票

我认为您的更改不会为优化器分配新的lr,并且我在Keras中加载模型后找到solution来重置lr值,希望它能帮到你。

© www.soinside.com 2019 - 2024. All rights reserved.