Понимание net_surgery в кафе
Я следую примеру caffe по net_surgery.ipynb, который объясняет, как изменить вес сохраненного .caffemodel
, Однако, поскольку я довольно новичок в Python, я не могу понять некоторые синтаксис.
Может кто-нибудь объяснить мне, что 7-я строка начинается с conv_params = {pr: ...
значит в приведенном ниже примере кода? (пример из 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}
определяет словарь conv_params
с ключами 'fc6-conv'
, 'fc7-conv'
а также 'fc8-conv'
,
Построение словаря с использованием for
заявление (... for pr in ...
) называется "Понимание словаря", и вы можете найти больше информации об этой конструкции здесь.