2

Я запускаю Лазанью и Теано для создания своей сверточной нейронной сети. В настоящее время я состою изget_all_param_values ​​() как читать lasagne.layer

l_shape = lasagne.layers.ReshapeLayer(l_in, (-1, 3,130, 130)) 
l_conv1 = lasagne.layers.Conv2DLayer(l_shape, num_filters=32, filter_size=3, pad=1) 
l_conv1_1 = lasagne.layers.Conv2DLayer(l_conv1, num_filters=32, filter_size=3, pad=1) 
l_pool1 = lasagne.layers.MaxPool2DLayer(l_conv1_1, 2) 
l_conv2 = lasagne.layers.Conv2DLayer(l_pool1, num_filters=64, filter_size=3, pad=1) 
l_conv2_2 = lasagne.layers.Conv2DLayer(l_conv2, num_filters=64, filter_size=3, pad=1) 
l_pool2 = lasagne.layers.MaxPool2DLayer(l_conv2_2, 2) 
l_conv3 = lasagne.layers.Conv2DLayer(l_pool2, num_filters=64, filter_size=3, pad=1) 
l_conv3_2 = lasagne.layers.Conv2DLayer(l_conv3, num_filters=64, filter_size=3, pad=1) 
l_pool3 = lasagne.layers.MaxPool2DLayer(l_conv3_2, 2) 
l_conv4 = lasagne.layers.Conv2DLayer(l_pool3, num_filters=64, filter_size=3, pad=1) 
l_conv4_2 = lasagne.layers.Conv2DLayer(l_conv4, num_filters=64, filter_size=3, pad=1) 
l_pool4 = lasagne.layers.MaxPool2DLayer(l_conv4_2, 2) 
l_conv5 = lasagne.layers.Conv2DLayer(l_pool4, num_filters=64, filter_size=3, pad=1) 
l_conv5_2 = lasagne.layers.Conv2DLayer(l_conv5, num_filters=64, filter_size=3, pad=1) 
l_pool5 = lasagne.layers.MaxPool2DLayer(l_conv5_2, 2) 
l_out = lasagne.layers.DenseLayer(l_pool5, num_units=2, nonlinearity=lasagne.nonlinearities.softmax) 

Последний слой - это плотник, который использует softmax для вывода моей классификации. Моя конечная цель - получить вероятность, а не классификацию (0 или 1).

Когда я вызываю get_all_param_values ​​(), он предоставляет мне обширный массив. Мне нужен только вес и смещение для последнего плотного слоя. Как вы это делаете? Я пробовал l_out.W и l_out.b и get_values ​​().

Заранее благодарен!

ответ

1

Вы можете получить параметры для одного слоя, используя get_params. Это объясняется в documentation.

1

Я изменил ваш код, потому что вы вставили ссылки l_in, но вы не указали l_in в своем коде. Я определил следующую сеть:

l_shape = lasagne.layers.InputLayer(shape = (None, 3, 130, 130)) 
l_conv1 = lasagne.layers.Conv2DLayer(l_shape, num_filters=32, filter_size=3, pad=1) 
l_conv1_1 = lasagne.layers.Conv2DLayer(l_conv1, num_filters=32, filter_size=3, pad=1) 
l_pool1 = lasagne.layers.MaxPool2DLayer(l_conv1_1, 2) 
l_conv2 = lasagne.layers.Conv2DLayer(l_pool1, num_filters=64, filter_size=3, pad=1) 
l_conv2_2 = lasagne.layers.Conv2DLayer(l_conv2, num_filters=64, filter_size=3, pad=1) 
l_pool2 = lasagne.layers.MaxPool2DLayer(l_conv2_2, 2) 
l_conv3 = lasagne.layers.Conv2DLayer(l_pool2, num_filters=64, filter_size=3, pad=1) 
l_conv3_2 = lasagne.layers.Conv2DLayer(l_conv3, num_filters=64, filter_size=3, pad=1) 
l_pool3 = lasagne.layers.MaxPool2DLayer(l_conv3_2, 2) 
l_conv4 = lasagne.layers.Conv2DLayer(l_pool3, num_filters=64, filter_size=3, pad=1) 
l_conv4_2 = lasagne.layers.Conv2DLayer(l_conv4, num_filters=64, filter_size=3, pad=1) 
l_pool4 = lasagne.layers.MaxPool2DLayer(l_conv4_2, 2) 
l_conv5 = lasagne.layers.Conv2DLayer(l_pool4, num_filters=64, filter_size=3, pad=1) 
l_conv5_2 = lasagne.layers.Conv2DLayer(l_conv5, num_filters=64, filter_size=3, pad=1) 
l_pool5 = lasagne.layers.MaxPool2DLayer(l_conv5_2, 2) 
l_out = lasagne.layers.DenseLayer(l_pool5, num_units=2, nonlinearity=lasagne.nonlinearities.softmax) 

Просто реализовать ответ Даниэля Реншоу в:

params = l_out.get_params() 
W = params[0].get_value() 

При печати Params, вы будете видеть все параметры для l_out:

[W, b] 

Таким образом, каждый элемент params, params [0] и params [1] - это общая переменная Anano, и вы можете получить числовые значения по параметрам [i] .get_value().