基于Theano的神经网络特征提取

时间:2017-01-15 22:47:00

标签: python neural-network theano feature-extraction lasagne

我有一个训练有素的网络,它由以下几层组成:  {conv1,pool1,conv2,pool2,conv3,pool3,conv4,pool4,fc5,fc6,output} 其中fc表示完全连接的层,conv表示卷积层。

我需要为某些图像进行特征提取。我正在使用烤宽面条和Theano。 我需要保存每个图层的功能以供以后分析。我是这种语言的新手所以我试图找到示例代码或一些教程(使用theano / lasagne)。但是,我不明白我应该自己做什么。

如果有人可以指导我如何实现特征提取,我将不胜感激。

提前谢谢

编辑:我跟随先生/女士gntoni的评论,这是我的代码:

v2.7

对于我的情况,我需要保存每个图层的功能。我想编写一个像Caffe那样的函数:

 feat_all = []
    for layer in layer_list:
        feat = np.zeros_like(lasagne.layers.get_output([self.acnn.cnn[layer]], inputs = img, deterministic=True))
        feat[:] = lasagne.layers.get_output([self.acnn.cnn[layer]], inputs = img, deterministic=True)
        feat_all.append(feat)
=

然而,我训练有素的模型是用千层面和theano写的,所以我必须用千层面格式来实现。

在编写上面的代码(在千层面)后,我得到一个空输出。 我想知道为什么以及如何解决它。

提前谢谢

2 个答案:

答案 0 :(得分:1)

与你的卷积神经网络一样,它包含两部分:

第一个是特征提取部分,在你的情况下包括转化池层{conv1,pool1,conv2,pool2,conv3,pool3,conv4,pool4}。

第二个是分类部分。在您的网络中:{fc5,fc6,output}。

培训时,第一部分是试图获得第二部分要分类的输入数据的最佳表示。

因此,如果经过培训,您可以断开这两个部分, conv4 图层的输出将为您提供所需的功能。

此功能可与不同的分类器一起使用。实际上,许多人使用已经训练过的网络(例如AlexNet),删除最后的分类层,并将这些功能与自己的分类系统一起使用。

答案 1 :(得分:0)

请注意,在Lasagne中,get_output方法会返回Theano张量,您无法直接使用它们来计算numpy数组中的要素。但是,您可以定义Theano 函数并使用它来计算值。在你的情况下:

layers = [self.acnn.cnn[layer] for layer in layer_list]
feat_fn = theano.function([input_var], lasagne.layers.get_output(layers),
                          deterministic=True)

其中input_var是网络的输入张量。 get_output方法可以接受多个图层,而Theano函数可以有多个输出,因此您可以定义单个函数来提取所有要素。获得数值就这么简单:

feat_all = feat_fn(img)