【问题标题】:Alex-Net for feature extraction用于特征提取的 Alex-Net
【发布时间】:2016-10-16 16:26:18
【问题描述】:

我尝试为 ImageNet 获取可靠的特征,以便对它们进行进一步分类。为了实现这一点,我想将 tensorflow 与 Alexnet 一起使用,用于特征提取。这意味着我想从 CNN 的最后一层获取值。有人可以写一段 Python 代码来解释它是如何工作的吗?

【问题讨论】:

  • “有人能写一段 python 代码来解释它是如何工作的吗?” - 我认为你误解了 SO。拿起tour 并阅读How to Ask

标签: python classification tensorflow feature-extraction


【解决方案1】:

正如jonrsharpe 提到的,这并不是stackoverflow 的真正MO,但在实践中,许多人确实选择编写代码来帮助解释答案(因为它通常更容易)。 所以我假设这只是沟通不畅,而你真的打算问以下两个问题之一:

  1. 如何在 TensorFlow 中获取 Alexnet 最后一层的值?
  2. 如何从深度卷积网络(如 alexnet)的最后一层提取特征?

第一个问题的答案其实很简单。我将使用 TensorFlow(松散地基于 AlexNet)中的 cifar10 示例代码作为示例。网络的前向传递内置于inference 函数中,该函数返回一个表示softmax 层输出的变量。要实际获得预测的图像标签,您只需对 logits 进行 argmax,如下所示:(我省略了一些设置代码,但如果您已经在运行 alexnet,那么您已经可以使用了)

logits = cifar10.inference(images)
predictions = tf.argmax(logits,1)
# Actually run the computation
labels = session.run([predictions])

因此,仅获取最后一层特征就像请求它们一样简单。唯一的问题是,在这种情况下,cifar10 本身并不公开它们,因此您需要修改 cifar10.inference 函数以返回两者:

# old code in cifar10.inference:
# return softmax_linear
# new code in cifar10.inference:
return softmax_linear, local4

然后修改所有对 cifar10.inference 的调用,就像我们刚刚展示的那样:

logits,local4 = cifar10.inference(images)
predictions = tf.argmax(logits,1)
# Actually run the computation, this time asking for both answers
labels,last_layer = session.run([predictions, local4])

就是这样。 last_layer 包含您为模型提供的所有输入的最后一层。

至于第二个问题,这是一个更深层次的问题,但我猜这就是你想要研究它的原因。我建议从阅读该领域发表的一些论文开始。我不是这里的专家,但我很喜欢周伯雷的作品。例如,尝试查看"Learning Deep Features for Discriminative Localization" 中的图 2。这是一篇本地化论文,但使用的技术非常相似(博雷的几篇论文都使用了它)。

【讨论】:

    猜你喜欢
    • 2018-02-02
    • 2013-07-28
    • 1970-01-01
    • 1970-01-01
    • 2011-07-25
    • 2017-09-12
    • 2022-07-20
    • 2011-01-10
    • 2014-04-03
    相关资源
    最近更新 更多