Caffe:使用相同的预训练权重初始化两个暹罗网络频道,但在训练期间没有共享权重

时间:2016-08-30 11:22:36

标签: neural-network deep-learning caffe conv-neural-network pycaffe

我正在尝试实施“Seeing the Forest from the Trees: A Holistic Approach to Near-infrared Heterogeneous Face Recognition, CVPRW 2016”中描述的暹罗网络。该方法涉及使用相同的单通道模型的预训练权重来初始化暹罗网络的两个通道。当权重被分享时,这在caffe中是非常直接的。但我希望以不分配权重的方式实现它(必须通过采用上述论文中提到的对比损失一起学习,但两个通道的初始化必须相同)。我找不到在caffe中实现它的方法。你们中的任何人都有任何关于整洁方法或黑客的建议吗? 感谢。

1 个答案:

答案 0 :(得分:1)

您可以使用caffe:

在python中加载源和暹罗目标模型
netSrc = caffe.Net('deploySrc.prototxt',
                'src.caffemodel',
                caffe.TEST)
netDst = caffe.Net('deployDst.prototxt',
                'dst.caffemodel',
                caffe.TEST)

然后,您可以从源到目标分配每层权重。假设您要将图层转换从源复制到暹罗网络中的convA和convB副本:

netDst.params['convA'] = netSrc.params['conv']
netDst.params['convB'] = netSrc.params['conv']

然后将结果保存到新的caffemodel:

netDst.save('dstInitialized.caffemodel')