如何在keras中递归扩展/解析/展平嵌套模型?

时间:2018-03-27 09:37:17

标签: recursion machine-learning neural-network nested keras

让我们说我构建了一个这样的嵌套模型:

from keras.models import Sequential, Model
from keras.layers.core import Input, Dense

model_1 = Sequential()
model_1.add(Dense(...))
model_1.add(Dense(...))

input_2 = Input(...)
output_2 = Dense(...)(input_2)
model_2 = Model(inputs=input_2, outputs=output_2) 

model = Sequential()
model.add(model_1)
model.add(model_2)

如何将此递归转换为" flat"模型,不包含任何ModelSequential图层。

由于model_1model_2可能已提前接受过培训,因此在转换过程中应保留参数。

1 个答案:

答案 0 :(得分:0)

我遇到了类似的问题,并且找到了可行的解决方案,但这似乎并不十分优雅。

基本思想是遍历子模型的各个层并将它们逐个添加到整个模型中,而不是添加整个子模型。

model = Sequential()

for layer1 in model1.layers:
    model.add(layer1)

for layer2 in model2.layers:
    model.add(layer2)

如果模型已经包含嵌套模型,则可以通过以下方法对其进行迭代:

model_flat = Sequential()

for layer_nested in model.get_layer('nested_model').layers:
    model_flat.add(layer_nested)