正如jonrsharpe所提到的,这并不是stackoverflow的工作原理,但在实践中,许多人确实选择编写代码来帮助解释答案(因为这通常更容易)。
所以我假设这只是一个错误的沟通,你真的想问以下两个问题中的一个:如何获取TensorFlow中Alexnet最后一层的值?在
如何从像alexnet这样的深卷积网络的最后一层提取特征?在
第一个问题的答案其实很简单。我将使用TensorFlow(松散地基于AlexNet)中的cifar10示例代码作为示例。网络的前向传递是在inference函数中构建的,该函数返回一个表示softmax层输出的变量。实际上,要获得预期的图像标签,只需argmax the logits,如下所示:(我省略了一些设置代码,但如果您已经在运行alexnet,那么您已经可以使用它了)logits = cifar10.inference(images)
predictions = tf.argmax(logits,1)
# Actually run the computation
labels = session.run([predictions])
所以,仅仅抓住最后一层的特征实际上和要求它们一样简单。唯一的问题是,在这种情况下,cifar10不会以本机方式公开它们,因此您需要修改cifar10.inference函数以同时返回这两个值:
^{pr2}$
然后修改对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。这是一篇本地化的论文,但它使用了非常相似的技术(伯雷的几篇论文也使用了这种技术)。在