看到分类器和图像之间的区别了吗?
Posted
技术标签:
【中文标题】看到分类器和图像之间的区别了吗?【英文标题】:See difference between classifier and an image? 【发布时间】:2018-01-11 08:02:37 【问题描述】:假设我已经针对特定对象训练了一个分类器,比如汤姆克鲁斯的脸。如果我随后将自己的面部图像输入它,有没有办法查看分类器的表示和它被测试的图像之间的差异?
(哪个库/语言不是很重要,但让我们假设 TensorFlow。)
【问题讨论】:
【参考方案1】:您可以通过多种方式在这里定义“差异”,这可能会导致不同的解决方案。一个简单的方法可能是在分类之前查看网络中的最后一个特征向量,并将其与汤姆克鲁斯面部的某种“理想”特征向量进行比较(尽管您可能必须对该向量进行某种归一化以及因此值不会无限增长)。然后你会有一些向量差异。
不过,我猜您真正想要的是看到图像形式的差异。但同样,您如何定义“差异”可能是一个问题。我怀疑显示差异的好方法是显示图像中应该更改的内容,使其看起来更像汤姆克鲁斯。这实际上是“深度梦想”网络(部分)的内容。这个想法是你计算梯度,但不是查看权重的梯度,而是查看输入的梯度。如果您在该方向更改图像,这些值将帮助您生成看起来更像您的目标类的图像。就好像您的训练被用于更新图像而不是网络的值(在您已经拥有经过训练的网络之后)。
this short video 进行到一半多一点,您会看到与我建议的内容相似的内容。它们显示了图像应该发生什么变化,以便网络对给定图像做出更强烈的反应。
【讨论】:
知道了,肯定是想看图片。我的机器学习很薄:“输入的梯度”是指将模型的向量与正在测试的图像进行比较? @JeffThompson,当你通常训练一个网络时,你会给网络一个图像并询问它里面有什么。您将结果与正确答案进行比较。然后使用反向传播来计算所有权重的梯度(您测试将每个权重稍微上下移动以找出哪些变化会使您更接近正确答案,但是您使用微积分以便您可以一次计算出所有变量)。然后,您将使用这些梯度更新权重以改进网络。在这种情况下,您做同样的事情,但要弄清楚您将如何更改图像。 @JeffThompson,实际上虽然 您 不需要做大部分工作,因为 TensorFlow 会为您完成大部分工作。要在 TensorFlow 中获取梯度(即如何更改值以获得更好的答案),您需要使用tf.gradients
。同样,通常这个(或更高级别的函数)用于计算权重的梯度,但在这里,您希望将其用于图像本身的变化。还有更多细节可以完成这项工作,但希望这能让您找到正确的方向!以上是关于看到分类器和图像之间的区别了吗?的主要内容,如果未能解决你的问题,请参考以下文章