2016-09-30 12 views
1

私はの重みを変更する方法を説明しているcaffeの例のnet_surgery.ipynbの例に従っています。しかし、私はPythonにはかなり新しいので、構文のいくつかを理解することはできません。caffeのnet_surgeryの理解

conv_params = {pr: ...で始まる7行目が以下のコード例で何を意味するのか説明できますか? (例はnet_surgery.ipynbからです - 手順8)。特にpr:とは何ですか?それは構造のような(キー、値)キーのですか?

# Load the fully convolutional network to transplant the parameters. 
net_full_conv = caffe.Net('net_surgery/bvlc_caffenet_full_conv.prototxt', 
          '../models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel', 
          caffe.TEST) 
params_full_conv = ['fc6-conv', 'fc7-conv', 'fc8-conv'] 
# conv_params = {name: (weights, biases)} 
conv_params = {pr: (net_full_conv.params[pr][0].data, net_full_conv.params[pr][1].data) for pr in params_full_conv} 

for conv in params_full_conv: 
    print '{} weights are {} dimensional and biases are {} dimensional'.format(conv, conv_params[conv][0].shape, conv_params[conv][1].shape) 

答えて

1

あなたが苦労している行:

conv_params = {pr: (net_full_conv.params[pr][0].data, net_full_conv.params[pr][1].data) for pr in params_full_conv} 

は、キー'fc6-conv''fc7-conv''fc8-conv'で辞書conv_paramsを定義します。
forステートメント(... for pr in ...)を使用した辞書の構築は、「辞書の理解」と呼ばれ、この構造体の詳細については、hereを参照してください。