Tensorflow自定义成本函数

时间:2017-01-12 02:22:40

标签: python tensorflow neural-network

我有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.

1 个答案:

答案 0 :(得分: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'之间的差异轻松做出决策。