数据通过 Caffe 中的层的多个路径

Multiple pathways for data through a layer in Caffe

我想在 Caffe 中构建一个网络,其中传入的数据最初被拆分,分别通过同一组层,最后使用 eltwise 层重新组合。在此之后,所有的部分将作为一个单一的斑点移动。

数据并行移动的网络部分的层配置将相同,除了学习的参数。

有没有一种方法可以在 Caffe 中定义这个网络,而无需重新定义数据的不同部分多次经过的层?换句话说,是否可以一次定义一个层并具有多个输入和输出路径,例如具有多个顶部和底部参数以及它们之间的映射?

我不认为 raw caffe 的 prototxt 格式可以满足您的需求。但是您可以使用 caffe.NetSpec() python 界面来获取它。即使用python接口构建网络并写入prototxt文件。

import caffe
from caffe import layers as L
ns = caffe.NetSpec()
ns.data, ns.label = L.Data(ntop=2, name='data', data_param={'source':'/path/to', 'batch_size': 32})
tops = []
for i in xrange(3):
    nm = 'path{}'.format(i)
    top = L.Convolution(ns.data, name=nm, convolution_params={'num_output':32})
    ns.__setattr__(nm, top)
    tops.append(top)
# concat
ns.concat = L.Concat(*tops, name='concat', concat_param={'axis':1})
print '{}'.format(ns.toProto())