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