修改训练好的模型架构,继续训练 Keras

Modify trained model architecture and continue training Keras

我想按顺序训练模型。那就是我想最初用一个简单的架构来训练模型,一旦训练完成,我想添加几个层并继续训练。可以在 Keras 中执行此操作吗?如果是这样,如何?

我尝试修改模型架构。但是在我编译之前,更改是无效的。一旦我编译,所有的权重都被重新初始化,我失去了所有训练过的信息。

我在 web 和 SO 中发现的所有问题都是关于加载预训练模型并继续训练或修改预训练模型的体系结构然后仅对其进行测试。我没有找到与我的问题相关的任何内容。任何指针也非常感谢。

PS:我在 tensorflow 2.0 包中使用 Keras。

在不知道模型细节的情况下,以下代码片段可能会有所帮助:

from tensorflow.keras.models import Model
from tensorflow.keras.layers import Dense, Input

# Train your initial model
def get_initial_model():
    ...
    return model

model = get_initial_model()
model.fit(...)
model.save_weights('initial_model_weights.h5')

# Use Model API to create another model, built on your initial model
initial_model = get_initial_model()
initial_model.load_weights('initial_model_weights.h5')

nn_input = Input(...)
x = initial_model(nn_input)
x = Dense(...)(x)  # This is the additional layer, connected to your initial model
nn_output = Dense(...)(x)

# Combine your model
full_model = Model(inputs=nn_input, outputs=nn_output)

# Compile and train as usual
full_model.compile(...)
full_model.fit(...)

基本上,您训练您的初始模型,保存它。然后重新加载它,并使用 Model API 将它与其他层包装在一起。如果您不熟悉 Model API,您可以查看 Keras 文档 here(afaik API 对于 Tensorflow.Keras 2.0 保持不变)。

请注意,您需要检查初始模型的最终层的输出形状是否与其他层兼容(例如,如果您只是在进行特征提取,则可能需要从初始模型中删除最终的密集层)。