如何在神经网络训练后提取图像特征?

是否有方法可以从一组图像中学习无监督特征?类似于word2vecdoc2vec,其中神经网络经过学习后,给定新文档即可获取其特征。

期望类似于这个示例,它展示了如何加载已学习的神经网络模型并预测新图像的特征。

是否有简单的示例说明如何在图像上实现卷积神经网络(CNN)并提取其特征,这将非常有帮助!

假设在这个示例中,如果我想为所有X_trainX_test获取CNN特征…有办法做到吗?另外,如果我们能获取每层每张图像的权重,我们可以将它们堆叠起来作为特征。在这种情况下,有没有办法获取这些?使用这些特征进行无监督任务会更容易,如果我们将它们视为向量的话。


回答:

如果我正确理解了你的问题,这个任务在深度学习领域中相当常见。对于图像,我认为最好的方法是使用卷积自编码器。你可以在这里阅读关于这种架构的信息

http://people.idsia.ch/~ciresan/data/icann2011.pdf

Keras的早期版本支持这种架构作为核心层之一,不过从1.0版本开始,我注意到它从文档中消失了。但——从头开始构建它仍然相当容易 🙂

在没有图像的情况下,还有其他方法,例如限制玻尔兹曼机(Restricted Boltzmann Machines)。

更新:

关于从神经网络激活中获取新特征的最佳激活类型——根据我的个人经验——这取决于你使用的网络大小。如果你使用的网络最后一层很宽(有很多节点),仅获取最后一层可能是有用的(由于参数数量,如果你还想考虑前面的层,可能会影响学习性能)。但是——如果(像在某些MNIST网络中那样)你的最后一层不足以完成这个任务——你可以尝试使用前面的层激活甚至整个网络的活动。说实话——我对这种情况下的改进不抱太大希望——但你可以尝试。我认为你应该使用这两种方法——从仅获取最后一层的激活开始——然后尝试检查当你添加前面的层激活时,你的新分类器的行为如何。

我强烈建议你还应该从网络学习的特征类型中获得一些见解——使用其激活的T-SNE嵌入。在许多情况下,我发现这很有用——例如,检查一层的尺寸是否足够。使用T-SNE,你可以检查从最后一层获得的特征是否是你的类别的良好区分器。这也可以为你提供关于数据和神经网络真正学习内容的良好见解(还有令人惊叹的可视化 :))

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注