2017-02-06 52 views
3

我训练tensorflow的im2txt样品,并将其输出损耗:究竟是什么损失?

INFO:tensorflow:global step 2174: loss = 3.6930 (15.83 sec/step) 
INFO:tensorflow:global step 2175: loss = 3.6651 (15.52 sec/step) 
INFO:tensorflow:global step 2176: loss = 3.5733 (18.25 sec/step) 
INFO:tensorflow:global step 2177: loss = 3.1979 (18.87 sec/step) 
INFO:tensorflow:global step 2178: loss = 2.9362 (15.99 sec/step) 
INFO:tensorflow:global step 2179: loss = 3.6375 (15.65 sec/step) 

什么损失?它与AI正确执行的概率(是否有公式)有关?什么是通常的可接受的损失?

回答

2

来源:https://github.com/tensorflow/models/blob/master/im2txt/im2txt/show_and_tell_model.py

losses = tf.nn.sparse_softmax_cross_entropy_with_logits(labels=targets, 
                  logits=logits) 
    batch_loss = tf.div(tf.reduce_sum(tf.multiply(losses, weights)), 
         tf.reduce_sum(weights), 
         name="batch_loss") 

softmax基本上是一个奇特的最大功能是可导(你可以查找的文档的确切定义)。对于最大的激活会有很高的价值。它可以有多个高激活,这将是所有错误的惩罚。

损失是你希望模型优化下来的东西。

这通常并不意味着太多,除非您已经训练了许多类似的模型,并且完全相同的损失。通常你会看看损失图,看看模型何时停止进展,以便停止训练。另外请记住,对于其他模型,您希望将其他事物添加到可能需要优化的损失中(称某些输入权重要平均为1.0),这会增加损失,但这并不意味着模型更糟。

如果您想弄清楚您的模型是好还是坏,请为您关心的事情添加度量标准。显而易见的事情是精确度/召回率/准确性。已经有预定义的指标可以使用(streaming_accuracy)。或者,您可以计算度量标准并将其作为摘要添加,但这不会从eval数据集中获得。

另一种方法是设置一个明显不好的模型(常数或随机),并将该模型的损失与您得到的结果进行比较。

1

损失是优化算法尝试最小化的目标函数。

一般而言,您希望您的损失函数能够衡量您的模型有多糟糕。但是因为优化算法需要一些数学性质才能很好地工作,所以不能选择像精度和回忆(通常与模型参数相关的连续函数)之类的常见问题。

随着分类任务,softmax是一个常见的选择。这是一个流畅而良好的argmax版本,用于选择网络激活率最高的课程。随着回归,通常mean squared error服务良好。