我有两个Keras模型(功能性API),它们共享一些层。我想知道是否训练第一个模型,第二个模型会自动更新其共享图层的权重,还是应该手动加载权重?
我从documentation知道可以在同一模型中共享图层,但是对于这种特殊情况我没有任何线索。
我还想知道具有共享层的Keras模型是否共享相同的计算图或它们是否具有独立的图。
答案 0 :(得分:2)
训练第一个模型时,共享层中的权重将在其他所有模型中自动更新。考虑以下示例:
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
时,encoder
和supervised
的图层autoencoder
的权重都会更新。换句话说,encoder
中的权重完全属于该层,并且不依赖于使用该层的模型。
对于第二个问题,答案是Keras仅使用一个计算图(即使模型不共享层也是如此)。