【问题标题】:Feature Extraction on Neural Networks Using Theano使用 Theano 对神经网络进行特征提取
【发布时间】:2017-05-30 17:57:21
【问题描述】:

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

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

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

提前谢谢你

编辑:我关注的是 gtoni 先生/女士的 cmets,这是我的代码:

 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)
=

就我而言,我需要保存每一层的特征。我想写一个像我们在 Caffe 中那样的函数:

self.net.blobs['data'].data[0] = img
        self.net.forward(end=layer_list[-1])

        feat_all = []
        for layer in layer_list:
            feat = np.zeros_like(self.net.blobs[layer].data[0])
            feat[:] = self.net.blobs[layer].data[0]
            feat_all.append(feat)

但是,我的训练模型是用 lasagne 和 theano 编写的,所以我必须以 lasagne 格式实现它。

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

提前谢谢你

【问题讨论】:

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


    【解决方案1】:

    请记住,在 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)
    

    【讨论】:

      【解决方案2】:

      像您的卷积神经网络一样,由两部分组成:

      第一个是特征提取部分,在您的情况下包括 conv-pool 层 {conv1, pool1, conv2, pool2, conv3, pool3, conv4, pool4}。

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

      在训练时,第一部分试图获得输入数据的最佳表示以供第二部分分类。

      所以,如果经过训练,你断开这两个部分,conv4 层的输出将为你提供你想要的功能。

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

      【讨论】:

      • 非常感谢。您还可以帮助我执行部分吗?因为我找不到在这种情况下应该使用哪个函数。
      • 你应该有一些类似lasagne.layers.get_output()的函数从最后一层获取值。只需创建一个新函数来从pool4 层获取值。
      • 非常感谢您的帮助。我会试试的。
      猜你喜欢
      • 2012-01-12
      • 2012-07-10
      • 1970-01-01
      • 2016-06-15
      • 2017-04-22
      • 2018-01-22
      • 1970-01-01
      • 2017-06-17
      • 2011-07-30
      相关资源
      最近更新 更多