我想在Caffe中构造一个网络,其中最初将传入数据分开,分开通过相同的层,并最终使用ELTwise层重新组合。之后,所有零件都将以一个斑点移动。
除了学习的参数外,数据移动的网络部分的图层配置将是相同的。
有没有一种方法可以在caffe中定义该网络,而不重新定义数据的不同部分经过多次的层?换句话说,是否可以定义一个图层并具有多个输入和输出的途径,类似于具有多个顶部和底部参数,它们之间的映射?
我不认为Raw Caffe的原始版格式允许您追求的目标。但是您可以使用caffe.NetSpec()
Python接口来获得此功能。也就是说,使用Python接口构建网络并编写原始文件。
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())