共享层,不同的模型

nai*_*bah 3 python keras tensorflow

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

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

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

rvi*_*nas 5

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

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(...)
Run Code Online (Sandbox Code Playgroud)

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

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