首页 > 解决方案 > 共享层,不同模型

问题描述

我有两个共享一些层的 Keras 模型(功能 API)。我想知道我是否训练第一个模型,第二个模型是否会自动更新其共享层的权重,或者我应该手动加载权重。

我从文档中知道可以在同一模型中共享层,但我对这种特殊情况没有任何线索。

我还想知道具有共享层的 Keras 模型是共享相同的计算图还是具有独立的计算图。

标签: pythontensorflowkeras

解决方案


当您训练第一个模型时,来自共享层的权重将在每个其他模型中自动更新。考虑以下示例:

x = Input(shape=(input_dim,))
encoder = Dense(output_dim)(x)
decoder = Dense(input_dim)(encoder)

autoencoder = Model(input=x, output=decoder)
supervised = Model(input=x, output=encoder)

autoencoder.compile(...)
supervised.compile(...)

在这里,当你训练 时supervised,来自 layer 的权重encoder会同时更新supervisedautoencoder。换句话说,来自的权重encoder完全属于这一层,它们不依赖于使用这一层的模型。

对于第二个问题,答案是 Keras 仅使用一个计算图(即使模型不共享层)。


推荐阅读