2

オブジェクトが与えられたcaffe.Net場合、特定のレイヤーにアクセスする最良の方法は何ですか?
今のところ、それらを反復処理する方法しか考えていませんが、これはあまり役に立ちません:

for i in range(n_layers):
  print net.layers[i].type
4

2 に答える 2

5

次の方法ですべてのレイヤーの名前を取得できます

all_names = [n for n in net._layer_names]

もちろん、学習したパラメータの値を調べたい場合は、この正味手術の例でそれがどのように行われるかを確認できます。

たとえば、conv1レイヤーのフィルターを調べたい場合 (モデルにその名前のレイヤーがあると仮定して)、アクセスできます。

In [1]: net.params['conv1'][0].data.shape
Out[1]: (64, 3, 3, 3)

そして、この層のバイアス項

In [2]: net.params['conv1'][1].data.shape
Out[2]: (64,)

ご覧のとおり、これは画像処理ネットの最初のレイヤーで、BGR (3 チャンネル) 入力の 3x3 パッチに作用する 64 個のフィルターがあります。

net.forward( 、 またはを使用して) ネットを介して既にデータをフィードしている場合は、ネットをnet.backward介してフィードされた特定の入力に対するさまざまなレイヤーの応答を調べることができます。

In [3]: net.blobs['conv1'].data.shape
Out[3]: (1, 64, 198, 198)

レイヤーの出力形状conv1は 198x198 ピクセルで 64 チャンネル (このレイヤーには 64 個のフィルターがあります) で、バッチ サイズは 1 です。
バックワード パスも実行した場合は、このレイヤーで計算された勾配を調べることもできます。

In [4]: net.blobs['conv1'].diff.shape
Out[4]: (1, 64, 198, 198)
于 2016-03-28T15:59:15.367 に答える