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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在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)

如何将此递归转换为“平面”模型,不包含任何ModelSequential图层。

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

答案

我有一个类似的问题,我得到了一个有效的解决方案,但这似乎并不优雅。

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

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)

以上是关于如何在keras中递归扩展/解析/展平嵌套模型?的主要内容,如果未能解决你的问题,请参考以下文章

以更快的方式展平和扩展 json

如何使用 flatten_json 递归地展平嵌套的 JSON

以递归方式展平包含未知级别的嵌套数组和映射的嵌套映射

使用递归(并且不使用循环)展平嵌套数组

一日一技:如何把多层嵌套的列表展平

javascript 通过递归来展平嵌套数组Ex:[1,2,3,[4,5,[7,8,[10,11,[12,13,[[[[[[14]]]]]]]]]] ]]