2

我正在运行 Lasagne 和 Theano 来创建我的卷积神经网络。我目前包括

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()。

提前致谢!

4

2 回答 2

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)

只是为了实现 Daniel Renshaw 的回答:

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

打印 params 时,您将看到 l_out 的所有参数:

[W, b] 

所以 params 的每个元素 params[0] 和 params[1] 都是 Theano 共享变量,你可以通过 params[i].get_value() 获取数值。

于 2016-02-13T14:14:31.533 回答
1

您可以使用get_params. 这在文档中进行了解释。

于 2016-02-09T10:25:06.210 回答