2

我想在Caffe中构建一个网络,其中传入的数据最初被分割,分别通过相同的一组图层,并最终使用eltwise图层重新组合。在此之后,所有部分将作为一个整体移动。在Caffe中通过图层的数据的多个路径

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

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

回答

1

我不认为原始咖啡的prototxt格式允许你以后的样子。但你可以使用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()) 
+0

谢谢! NetSpec()是否记录在任何地方,API?另外,你能解释一下上面的代码片段吗?我认为它创建了一个单一的数据层,三个平行的卷积层,最后是一个连接层。那是对的吗? – GoodDeeds

+1

@GoodDeeds正确。尝试代码。它不是太复杂。你可以在这里找到更多的例子:stackoverflow – Shai

+0

@GoodDeeds你可以在[this link]中使用'caffe.NetSpec()'(又名'pyCaffe')来找到更多的例子(http://davidstutz.de/pycaffe-tools-examples-和资源/) – Shai