Python 3.x 如何将一个经过培训的网络用作另一个网络keras中的分支?

Python 3.x 如何将一个经过培训的网络用作另一个网络keras中的分支?,python-3.x,tensorflow,keras,deep-learning,Python 3.x,Tensorflow,Keras,Deep Learning,假设我的网络与此类似: [ICNet_Keras]() 本回购协议中的培训程序错误! 它有三个分支。 分辨率1/4分支是一个预训练网络,具有保存的权重。 分辨率1/2分支是1/4网络的一部分,权重与1/4共享(我不知道如何共享) 决议1分支是我的定制 列车程序如下: 1/4的人接受了城市景观(用于放松)培训,并保存和重新加载 1/4分支的前几层用于馈送分辨率为1/2的图像 最后一个分支用于全分辨率图像。 这些分支与CFF(级联特征融合模块)相关 如何加载1/4预训练重量并训练整个网络? 1

假设我的网络与此类似:

[ICNet_Keras]()

本回购协议中的培训程序错误! 它有三个分支。 分辨率1/4分支是一个预训练网络,具有保存的权重。 分辨率1/2分支是1/4网络的一部分,权重与1/4共享(我不知道如何共享) 决议1分支是我的定制

列车程序如下: 1/4的人接受了城市景观(用于放松)培训,并保存和重新加载
1/4分支的前几层用于馈送分辨率为1/2的图像
最后一个分支用于全分辨率图像。
这些分支与CFF(级联特征融合模块)相关

如何加载1/4预训练重量并训练整个网络?
1/4和1/2分支中的某些层之间的权重共享如何

为简单起见,您可以假定
1/4有5个层,分别进行培训并加载以进行微调
1/2有2个1/4的第一层
1有2个独立的层

而CFF只是上采样+concat

有你的输入张量:

inputs = Input(size)
如果您自己训练模型,请确保使用可变图像大小(它是卷积的,对吗?):输入形状=
(无,无,通道)

如果没有,则需要使用可变图像大小重建模型。请确保不使用展平,它将不支持可变图像大小。如果您想使用展平后的内容,它将不支持重量转移

1/4 加载保存的模型(无需编译,您不是直接对其进行培训):

通过它传递输入(可能先进行一些重缩放)

1/2 从
lowRes
获取段:

midRes = Model(lowRes.input, lowRes.layers[1].output)
通过它传递输入(可能先进行一些重缩放)

1/1 不管它是什么,都要建造:

....
....
hiRes = Model(....)
通过它传递输入:

hiOut = hiRes(inputs)

旧答案 层和模型可以多次使用,可以根据需要多次使用

共享层:

创建图层:

layer = Conv2D(....)
out1 = layer(input1)
out2 = layer(input2)
out3 = layer(input3)
使用图层:

layer = Conv2D(....)
out1 = layer(input1)
out2 = layer(input2)
out3 = layer(input3)
这是同一层,所以,相同的重量

共享模型:

一个
模型
是一个
,因此它的工作原理完全相同:

model = load_some_model()

branch1_out = model(input_branch1)    
branch2_out = model(input_branch2)
最终型号:

最后,只需创建一个定义输入张量和输出张量的模型:

final_model = Model(inputs = input_or_list_of_inputs, 
                    outputs= output_or_list_of_outputs)

谢谢,我理解体重分担。但对于模型共享,假设保存了1/4,然后将其加载到模型。1/2是平行车道中1/4(例如前5层)的一部分。所以我需要重新定义它,从1/4中提取相应的权重并分配给它(有更好的解决方案吗?!)。然后添加我的自定义分支。这就是它变得复杂的地方!你为什么不用你想要的网络的细节来编辑你的问题呢?解决方案不是很难。你说模型是分层的。model.compile()中的配置如何?我是否要为新模型清除它们?我正在尝试如何实现我的配置,它在大多数方面与icnet类似。但是keras中的icnet实现是错误的。compile只添加loss函数和优化器。对于您不打算调用的
fit
型号,这是完全不必要的。只有您称之为
fit
的模型需要优化器和损耗。
final_model = Model(inputs = input_or_list_of_inputs, 
                    outputs= output_or_list_of_outputs)