2

私は、入ってくるデータが最初に分割され、同じレイヤーセットを別々に通過し、最後にeltwiseレイヤーを使用して再結合されるネットワークをCaffeで構築したいと考えています。この後、すべての部分が単一ブロブとして移動します。Caffeのレイヤーを通るデータの複数の経路

学習されたパラメータを除いて、データがパラレルに移動するネットワーク部分のレイヤー構成は同一になります。

Caffeでこのネットワークを定義する方法はありますか?データのさまざまな部分が複数回通過するレイヤーを再定義する必要はありませんか?言い換えれば、一度レイヤーを定義し、入力と出力のための複数の経路を持つことが可能ですか?

答えて

1

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()) 
+0

ありがとうございます! 'NetSpec()'はAPI、どこに文書化されていますか?また、上記のコードスニペットを説明していただけますか? 1つのデータレイヤー、3つの並列畳み込みレイヤー、最後には連結レイヤーを作成すると思います。あれは正しいですか? – GoodDeeds

+1

@ GoodDeedsが正しい。コードを試してみてください。それほど複雑ではありません。あなたはここでもっと多くの例を見つけることができます。stackoverflow – Shai

+0

@GoodDeeds [このリンク](http://davidstutz.de/pycaffe-tools-examples-news)で 'caffe.NetSpec()'(別名 'pyCaffe') and-resources /) – Shai

関連する問題