【问题标题】:Tensorflow Custom Cost FunctionTensorFlow 自定义成本函数
【发布时间】:2017-01-13 06:50:23
【问题描述】:

我有 2 个具体的类,比如 A 和 C。我想使用 NN 将它们分类为 A、B、C 类,这样过于接近而无法自信分类的样本就被归类为 B。成本函数应该如下: 错误分类(将 A 分类为 C,反之亦然)将产生非常大的成本。正确的分类将具有零成本。将一个项目分类为 B 将具有非常低的成本。结果是我们只区分我们非常确定适合它们各自类别的样本。

我只完成了 TensorFlow 中的简单教程,但没有介绍如何定义更具体的成本函数,例如。谁能解释一下如何在 TensorFlow 中实现这一点

这是我的相关代码,我目前仅使用 2 个类对其进行分类。它直接来自 TensorFlow 教程:

cost = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(y, y_))
train_step = tf.train.AdamOptimizer(learning_rate = learning_rate).minimize(cost)

y 是 NN 的输出(对于具有 3 个类的两个样本集看起来像 [[1,0,0],[0,1,0]]),y_ 是样本的正确类这可能是 [[1,0,0],[0,0,1]]。在这个例子中,我们将第二个样本分类为 B,因为我们不确定,但真正的类别是 C。

【问题讨论】:

  • 你的代码在哪里?请参阅How to Ask。您甚至都懒得上 2 分钟的网站 tour

标签: python tensorflow neural-network


【解决方案1】:

我认为您对 NN 分类器的工作原理有一些基本的误解。如果您要更深入地对它们进行编码,您可能应该阅读一下。我强烈推荐 Michael Nielsen Neural Networks and Deep Learning 的在线图书。

也就是说,您正在寻找的解决方案不是创建一个特殊的成本函数,而是您如何解释从 NN 获得的结果。你没有 3 个类,你有 2 个。“我不知道这是什么”本身并不是一个类,而是 NN 对其答案的信心的衡量标准。因此,您的网络应该有 2 个输出,每个类一个,就像在 TendorFlow 指南中一样。你应该像在指南中一样训练它。一旦你的网络经过训练,当你给它一个样本进行分类时,你会得到 2 个数字,我们称它们为 A' 和 C'。这些数字表明 NN 对样本所属类别的信心。例如,如果你得到 A' == 0.999 和 C' == 0.00001,网络非常确定你的样本是 A 类。如果你得到 A' == 0.6 和 C' == 0.59,你的网络没有想法是样本是 A 还是 C,但稍微支持它是 A 类的理论。现在由您决定置信区间是多少。为了使这更容易,您可能应该将 softmax 用于输出层的非线性(TensorFlow MNIST 指南的方式)。 softmax 的一个有用特性是所有类的总和始终为 1,您可以根据 A' 和 C' 之间的差异轻松做出决定。

【讨论】:

  • 感谢您的回复。我面临的具体问题是优化分类,以使特定类型的错误具有非常具体的成本。我希望能够完成网络内特定真/假阳性/阴性率的优化。你是说没有办法创建一个自定义成本函数来完成这个吗?我知道还有其他方法可以做到这一点。我意识到这不是一个传统的应用程序,但是如果正确选择了要最小化的成本函数,数学无论如何都应该解决
  • 不,你不能只用不同的成本函数来解决这个问题。想想看。当您开始训练您的网络时,您的权重会设置为从标准或均匀分布中获取的一些随机值。您的网络不确定任何事情,它是通过将标签与预测进行比较来更新权重以做出越来越好的预测。所以,按照你自己的规则“如果你不知道这是 A 还是 C,这就是 B”,一切都会被归类为 B,网络永远不会真正训练来识别 A 和 C。这有点粗略解释。
  • 当然,如果您正在寻找一些非常具体的错误,并且您可以在训练数据语料库中将这些错误标记为 B 类,您可以训练网络识别这些...可能...如果您正在寻找的错误与常规的 A 和 C 有足够的区别。但是您对 A 和 C 的识别准确性可能会受到影响。
  • 重点是,如果将某事物分类为 B 的成本高于正确分类它的成本,则在最小化成本函数时,网络将学习尽可能多地分类为 A 或C. 它不会只是满足于将所有内容归类为 B,正如您想象的那样。将权重向一个方向移动可能会将一个“A”归类为 A,而将其余的归类为 B。这比以前的成本更低。这就是我想要的。您是否知道如何在 Tensor Flow 中创建自定义的特定成本函数?这就是问题
  • 这不是损失函数的工作原理。当您的分类更正确时,损失函数的值会更低,而不是在识别特定类时。
猜你喜欢
  • 2016-02-14
  • 2016-11-08
  • 1970-01-01
  • 2016-06-03
  • 2018-09-30
  • 2016-09-13
  • 2018-10-28
  • 2017-12-29
  • 1970-01-01
相关资源
最近更新 更多