如果你不小心搜到了这篇博客,建议关掉,因为这篇博客仅为我自己的工作记录。参考价值较低且没有经过整理。非常抱歉。
1.交叉熵函数:
参考链接:https://blog.csdn.net/john_xyz/article/details/61211422
tf.nn.softmax_cross_entropy_with_logits(_sentinel=None, labels=None, logits=None, dim=-1, name=None)
注意:这个操作的输入logits是未经缩放的,该操作内部会对logits使用softmax操作。
import tensorflow as tf labels = [[0.2,0.3,0.5], [0.1,0.6,0.3]] logits = [[2,0.5,1], [0.1,1,3]] logits_scaled = tf.nn.softmax(logits) result1 = tf.nn.softmax_cross_entropy_with_logits(labels=labels, logits=logits) result2 = -tf.reduce_sum(labels*tf.log(logits_scaled),1) result3 = tf.nn.softmax_cross_entropy_with_logits(labels=labels, logits=logits_scaled) with tf.Session() as sess: print sess.run(result1) print sess.run(result2) print sess.run(result3) >>>[ 1.41436887 1.66425455] >>>[ 1.41436887 1.66425455] >>>[ 1.17185783 1.17571414]
2.
self.accuracy = tf.reduce_mean(tf.cast(self.correct_prediction, tf.float32)) 误写成 self.accuracy = tf.reduce_mean(tf.cast(self.correct_prediction, ‘tf.float32’))
3.其他博主针对于小样本数据易过拟合的调参过程:
https://blog.csdn.net/MrGiovanni/article/details/52167016
4. 关于交叉熵损失和分类准确率:
结论:交叉熵损失和分类准确率不一定是成比例的。
原因:(参考链接:https://www.zhihu.com/question/65439175/answer/231303779)
考虑一种极端情况,- 1log0.01 - 0log0.99 和 - 1log(0.49) - 0log(0.51)。同样是分错,前者的交叉熵损失远远大于后者。按照知乎er的解释,[0.01,0.99]这种情况是模型极度自信,是不好的,有可能会过拟合。那么我的理解[0.49,0.51]这种情况也未必好,可是解释为极度不自信,甚至是随机判别,有可能会欠拟合。可以通过正则化技术控制平衡这两种可能性,但是控制的程度是多少?未知(目前还没有看到methodology,慢慢调参吧)。
这个问题给我的警示:在模型训练过程中没有特殊情况尽量加正则化项。因为:在没有任何正则手段的情况下,随着训练,权值是会无限制增长, 这样造成的结果是什么呢?就是概率输出分布更加宽,更容易出现极端的概率,虽然正确分类的 loss 会降低,但是万一有一个错了,那么错误造成的 loss 是多个正确分类也拉不回来的。