首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将经过训练的网络作为另一个网络角中的分支使用?

如何将经过训练的网络作为另一个网络角中的分支使用?
EN

Stack Overflow用户
提问于 2019-07-28 11:52:20
回答 1查看 1.2K关注 0票数 2

假设我有这样的网络:

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-28 16:26:39

输入张量:

代码语言:javascript
运行
复制
inputs = Input(size)

如果你自己训练这个模型,确保你用一个可变的图像大小来训练它(它是复杂的,对吗?):输入形状= (None, None, channels)

如果不是,则需要使用可变的图像大小重新构建模型。确保您不使用Flatten,它将不支持可变的图像大小。它将不支持重量转移,如果你想使用的是什么是后扁平。

1/4

加载您保存的模型(不需要编译,也不是直接训练它):

代码语言:javascript
运行
复制
lowRes = load_model(filename, compile=False, custom_objects=if_needed)

通过它传递输入(可能先做一些重新标度)

代码语言:javascript
运行
复制
lowOut = lowRes(inputs)

1/2

lowRes获取段

代码语言:javascript
运行
复制
midRes = Model(lowRes.input, lowRes.layers[1].output)

通过它传递输入(可能先做一些重新标度)

代码语言:javascript
运行
复制
midOut = midRes(inputs)

1/1

无论是什么,都要建造:

代码语言:javascript
运行
复制
....
....
hiRes = Model(....)

通过它传递输入:

代码语言:javascript
运行
复制
hiOut = hiRes(inputs)

旧答案

层和模型可以不止一次使用,可以根据需要多次使用。

共享层:

创建图层:

代码语言:javascript
运行
复制
layer = Conv2D(....)

使用图层:

代码语言:javascript
运行
复制
out1 = layer(input1)
out2 = layer(input2)
out3 = layer(input3)

它是同一层,所以,同样的重量。

共享模型:

Model a Layer,所以它的工作原理完全相同:

代码语言:javascript
运行
复制
model = load_some_model()

branch1_out = model(input_branch1)    
branch2_out = model(input_branch2)

最终模型:

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

代码语言:javascript
运行
复制
final_model = Model(inputs = input_or_list_of_inputs, 
                    outputs= output_or_list_of_outputs)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57240634

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档