使用共享层保存Keras模型

7
我有两个keras模型,它们共享某些层次结构,我想将它们的权重保存到hd5文件中。如果我单独保存这两个模型,我认为这些共享层次结构会被保存两次,占用了磁盘上的双倍空间。如何在一个文件中保存它们呢?谢谢!
1个回答

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,或者将它们用于推理。
为了能够在训练combined_model1时保存shared_modelmodel1的检查点,您可以使用alt-model-checkpoint库创建一个回调函数。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接