有没有办法从图像集中学习无监督功能。类似于word2vec或doc2vec,其中学习神经网络并给出新文档,我们得到它的特征。
期望与此示例https://dato.com/learn/gallery/notebooks/food_retrieval-public.html类似,表明它可以加载学习的nn模型并预测新图像的功能。
是否有任何简单的示例如何在图像上实现cnn并将其功能恢复为有帮助!!
在此示例中假设https://github.com/fchollet/keras/blob/master/examples/mnist_cnn.py 如果我想获得所有X_train和X_test的cnn功能......有什么办法吗? 此外,如果我们可以为每个图像获得每层的权重,我们可以将它们堆叠起来并用作特征。在那种情况下有一种方法来获得相同的。 如果我们将它们视为向量,那么将这些特征用于无监督任务会更容易。
答案 0 :(得分:1)
如果我正确理解了您的问题,这项任务在深度学习领域非常普遍。在图像的情况下,我认为最好的是卷积自动编码器。你可以阅读这个架构,例如这里
http://people.idsia.ch/~ciresan/data/icann2011.pdf
以前版本的Keras支持这种架构作为核心层之一,但从版本1.0开始,我注意到它从文档中消失了。但是 - 从头开始构建它仍然很容易:)
在noimage情况下,还有另一种方法,例如受限制的玻尔兹曼机器。
更新:
当涉及哪种激活最适合从神经网络激活中获取新功能时 - 根据我的个人经验 - 它取决于您使用的网络大小。如果你使用最后一层很宽的网络(有很多节点),那么只获取最后一层可能是有用的(如果你想考虑以前的层,由于参数的数量 - 它可能会损害学习的性能)。但是 - 如果(就像某些MNIST网络一样)你的最后一层不足以完成这项任务 - 你也可以尝试使用之前的图层激活甚至是所有网络活动。老实说 - 在这种情况下,我并没有期待太多改进 - 但你可以试试。我认为您应该使用这两种方法 - 从仅采用最后一层激活开始 - 然后在添加先前图层的激活时尝试检查新分类器的行为。
我强烈建议您从网络正在学习什么类型的功能中获得一些见解 - 使用T-SNE嵌入它激活。在许多情况下,我发现它很有用 - 例如检查图层的大小是否足够。使用T-SNE,您可以检查从最后一层获得的特征是否是您的类的良好鉴别器。它还可以为您提供有关您的数据的良好见解以及神经网络真正学习的内容(以及令人惊叹的可视化:) :)