假设我有这样的网络:
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只是upsample+concat
发布于 2019-07-28 16:26:39
输入张量:
inputs = Input(size)
如果你自己训练这个模型,确保你用一个可变的图像大小来训练它(它是复杂的,对吗?):输入形状= (None, None, channels)
。
如果不是,则需要使用可变的图像大小重新构建模型。确保您不使用Flatten
,它将不支持可变的图像大小。它将不支持重量转移,如果你想使用的是什么是后扁平。
1/4
加载您保存的模型(不需要编译,也不是直接训练它):
lowRes = load_model(filename, compile=False, custom_objects=if_needed)
通过它传递输入(可能先做一些重新标度)
lowOut = lowRes(inputs)
1/2
从lowRes
获取段
midRes = Model(lowRes.input, lowRes.layers[1].output)
通过它传递输入(可能先做一些重新标度)
midOut = midRes(inputs)
1/1
无论是什么,都要建造:
....
....
hiRes = Model(....)
通过它传递输入:
hiOut = hiRes(inputs)
旧答案
层和模型可以不止一次使用,可以根据需要多次使用。
共享层:
创建图层:
layer = Conv2D(....)
使用图层:
out1 = layer(input1)
out2 = layer(input2)
out3 = layer(input3)
它是同一层,所以,同样的重量。
共享模型:
Model
是a Layer
,所以它的工作原理完全相同:
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)
https://stackoverflow.com/questions/57240634
复制相似问题