Понимание 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 ...) называется "Понимание словаря", и вы можете найти больше информации об этой конструкции здесь.

Другие вопросы по тегам