我想在 Caffe 中构建一个网络,其中传入的数据最初被拆分,分别通过同一组层,最后使用 eltwise 层重新组合。在此之后,所有部分将作为一个单一的斑点移动。
数据并行移动的网络部分的层配置将相同,除了学习参数。
有没有办法在 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())