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

How to extract feature for an image after neural network training?

有没有办法从一组图像中学习无监督特征。类似于 word2vecdoc2vec,其中学习神经网络并给定新文档,我们获得其特征。

期望与此类似example表明它可以加载学习的神经网络模型并预测新图像的特征。

是否有任何简单示例如何在图像上实现 cnn 并恢复其功能会有所帮助!!

假设在这个example 如果我想获得所有 X_trainX_test 的 cnn 功能......有什么办法吗? 此外,如果我们可以获得每个图像每层的权重,我们可以将它们堆叠起来并用作特征。在那种情况下,有没有办法得到相同的。 如果我们将这些特征视为向量,那么将这些特征用于无监督任务会更容易。

如果我正确理解了你的问题,这个任务在深度学习领域是很常见的。对于图像,我认为最好的是卷积自动编码器。您可能会阅读有关此架构的信息,例如这里

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

以前版本的 Keras 支持此架构作为核心层之一,但从 1.0 版开始我注意到它从文档中消失了。但是 - 从头开始​​构建它仍然很容易 :)

在没有图像的情况下,还有另一种方法,例如受限玻尔兹曼机。

更新:

当谈到哪种激活最适合从神经网络激活中获取新功能时——根据我个人的经验——这取决于你使用的网络的大小。如果您使用最后一层很宽(有很多节点)的网络,那么只获取最后一层可能会有用(由于参数数量,如果您还想考虑前面的层 - 这可能会损害学习的性能)。但是 - 如果(比如某些 MNIST 网络的情况)你的最后一层不足以完成这项任务 - 你可以尝试使用之前的层激活甚至全网 activity。老实说——我并不期望在这种情况下有太大的改进——但你可以试试。我认为您应该同时使用这两种方法 - 从仅采用最后一层激活开始 - 然后在添加来自前几层的激活时尝试检查新分类器的行为。

我强烈建议您从网络正在学习的特征类型中获得一些见解 - 使用它激活的 T-SNE 嵌入。在许多情况下,我发现它很有用——例如检查层的大小是否足够。使用 T-SNE,您可以检查从最后一层获得的特征是否是您 类 的良好鉴别器。它还可以让您深入了解您的数据以及神经网络真正学习的内容(以及惊人的可视化效果:))