我有一个模型,我想用learning_rate = 0.8 训练它几个时期,然后设置学习率= 0.4 并继续训练。 但是由于学习率是在编译模型时设置的......那么如果我在几个时期后重新编译它,模型/权重会发生什么?
下面是我的代码:P.S(我的学习率是动态的)
lr = 0.04
adam = Adam(lr=lr)
weight_factor = 10
models.compile(
optimizer=adam,
"kullback_leibler_divergence"
loss = {'W1':kl_divergence,'age':mae},
metrics={"age": mae,"W1":'accuracy'},
loss_weights={'W1':weight_factor, 'age': 1}
)
动态学习率回调
callbacks = [
ReduceLROnPlateau(monitor='val_age_mean_absolute_error',
factor = 0.5,
patience = 7,
min_delta = 0.01,
cooldown = 2,
min_lr = 0.0001,
mode = 'min')
]
培训
epochs=35
history = models.fit(train_gen, steps_per_epoch=len(trainset) / batch_size, epochs=epochs, callbacks=callbacks, validation_data=validation_gen, validation_steps=len(testset) / batch_size * 3)
重新编译模型时,权重将重置为随机。
所以你应该使用
model.save_weights('weights.h5')
保存权重,然后编译模型,然后加载权重 model.load_weights('weights.h5')
您可以重新编译模型而不会丢失权重。 faheem的答案是错误的。
重新编译模型常用于迁移学习和模型微调,在 Tensorflow 官方文档中有描述。
https://www.tensorflow.org/guide/keras/transfer_learning
如果重新编译模型会删除权重,那么迁移学习基本上不起作用。