当前位置: 首页 > 知识库问答 >
问题:

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

卞嘉许
2023-03-14

我有一个经过训练的网络,它由以下层组成:{con1, pool1, con2, pool2, con3, pool3, con4, pool4, fc5, fc6,输出}fc表示完全连接的层,conv表示卷积层。

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

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

提前谢谢你

编辑:我遵循了gntoni先生/女士的评论,这是我的代码:

 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)

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

在编写了上面的代码(在lasane中)之后,我得到了一个空输出。我想知道为什么以及如何修复它。

提前谢谢你

共有2个答案

金泉
2023-03-14

请记住,在千层面中,get\u output方法返回无张量,您不能直接使用它们来计算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\u var是网络的输入张量。get\u output(获取输出)方法可以接受多个图层,并且无函数可以有多个输出,因此您可以定义一个函数来提取所有特征。获取数值非常简单:

feat_all = feat_fn(img)
汤昊
2023-03-14

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

第一个是特征提取部分,在您的示例中包含conv池层{conv1、pool1、conv2、pool2、conv3、pool3、conv4、pool4}。

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

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

因此,如果经过训练后,您断开这两个部分的连接,con4层的输出将为您提供所需的功能。

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

 类似资料:
  • 我读过这篇文章http://www.codeproject.com/Articles/143059/Neural-Network-for-Recognition-of-Handwritten-Di当我转到这个:第0层:是MNIST数据库中手写字符的灰度图像,填充到29x29像素。输入层有29x29=841个神经元。图层#1:是一个包含六(6)个要素地图的卷积图层。从第1层到前一层有13x13x6=

  • 我在Keras有卷积神经网络。我需要知道每个图层中要素地图的尺寸。我的输入是28 x 28像素的图像。我知道有一种计算方法,但我不知道如何计算。下面是我使用Keras的代码片段。 最后,这就是我想画的。非常感谢。

  • 神经网络的主要原理包括一系列基本元素,即人工神经元或感知器。它包括几个基本输入,如:x1,x2 …… .. xn,如果总和大于激活潜在量,则产生二进制输出。 样本神经元的示意图如下所述 - 产生的输出可以认为是具有激活潜在量或偏差加权和。 典型的神经网络架构如下所述 - 输入和输出之间的层称为隐藏层,层之间的连接密度和类型是配置。例如,完全连接的配置使层L的所有神经元连接到的神经元。对于更明显的定

  • 假设我有一幅尺寸为125*125的RGB图像,我使用了10个尺寸为5*5、步长为3的过滤器,那么这一层的特征图是什么?特征图的参数总数是多少?10*((125-5)/3)1=(41*41*10)(过滤器数量)但RGB图像和灰度图像之间的区别是什么?因此,对于RGB图像,它应该是41*41*30(过滤器数量*输入图像通道数量)?对于参数总数:5*5*3*10=750?

  • 我正在尝试用RELU实现神经网络。 输入层- 以上是我的神经网络结构。我对这个relu的反向传播感到困惑。对于RELU的导数,如果x 有人能解释一下我的神经网络架构的反向传播“一步一步”吗?

  • 神经网络 (Neural Network) 是机器学习的一个分支,全称人工神经网络(Artificial Neural Network,缩写 ANN),是一种模仿生物神经网络的结构和功能的数学模型或计算模型,用于对函数进行估计或近似。 Perceptron (感知器) 一个典型的神经网络由输入层、一个或多个隐藏层以及输出层组成,其中箭头代表着数据流动的方向,而圆圈代表激活函数(最常用的激活函数为