使用共享图层保存keras模型

时间:2018-12-26 10:26:41

标签: keras

我有两个共享图层的keras模型,我想将其权重保存在hd5文件中。如果我分别保存两个模型,我认为共享层将使用磁盘空间的两倍保存两次。如何将其保存在唯一的文件中?

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以将共享层放在单独的模型中。例如,如果共享层是:layer1layer2,那么您必须创建一个模型,其中输入层是 layer1,输出层是 layer2layer2 的输出将成为两个模型的输入。

如果共享层是两个模型中的第一层,那么任务会变得更容易,分离共享层后您将拥有三个模型。如果层位于每个模型的输入层和输出层之间,那么您必须在每个模型中的共享层之前将层分开,这将导致两个额外的模型。

为了轻松实现这一点,您可以使用 Keras Functional API 将一个模型的输出作为另一个模型的输入来组合多个模型。例如,如果您有模型 shared_modelmodel1model2,那么您可以通过将 shared_model 的输出作为输入来创建用于训练或推理的两个模型对于 model1model2

input_layer = Input(input_shape)
shared_output = shared_model(input_layer)

combined_output1 = model1(shared_output)
combined_model1 = Model(inputs=input_layer, outputs=combined_output1)

combined_output2 = model2(shared_output)
combined_model2 = Model(inputs=input_layer, outputs=combined_output2)

通过这种方式,您可以训练 combined_model1combined_model2 或将它们用于推理。

为了能够在训练 shared_model 时保存模型 model1combined_model1 的检查点,您可以使用 alt-model-checkpoint 库来创建回调。