我有一个具有两个相似分支的多任务网络,以及一个只有一个分支的预训练网络(这个分支与多任务网络的分支相同)。我想用预训练网络中层的权重来初始化我多任务网络中两个分支的层的权重。
现在,我可以通过为层使用与预训练网络中相同的名称来正确初始化其中一个分支。但是,我必须为另一个分支的层使用不同的名称,因此这些层将不会采用预训练的权重。
另外,我不希望两个分支共享权重。因此,为两个分支中对应的层赋予相同的权重名称是行不通的。
有没有一个好的方法/技巧来实现这一点?
附注:我希望避免网络手术,但欢迎任何评论,解释一个好的实现方法。
澄清:我只是想用相同的权重初始化两个分支。它们可以在训练阶段学习不同的权重,因为它们由不同的损失层控制。
回答:
Przemak D的回答提供了一个不错的技巧来实现上述目标。
- 为两个分支的层赋予不同的名称,并启用权重共享
- 初始化网络并训练1-2次迭代
- 然后使用步骤2中得到的caffemodel初始化权重,训练原始网络(不共享权重)。
上述是一个不错的技巧,但网络手术是实现这一目标的更好方法。