オブジェクトが与えられたcaffe.Net
場合、特定のレイヤーにアクセスする最良の方法は何ですか?
今のところ、それらを反復処理する方法しか考えていませんが、これはあまり役に立ちません:
for i in range(n_layers):
print net.layers[i].type
オブジェクトが与えられたcaffe.Net
場合、特定のレイヤーにアクセスする最良の方法は何ですか?
今のところ、それらを反復処理する方法しか考えていませんが、これはあまり役に立ちません:
for i in range(n_layers):
print net.layers[i].type
次の方法ですべてのレイヤーの名前を取得できます
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)