loss函数,即损失函数,是决定网络学习质量的关键。若网络结构不变的前提下,损失函数选择不当会导致模型精度差等后果。若有错误,敬请指正,Thank you!
目录
一、loss函数定义
二、常见的loss算法种类
1.MSE(均值平方差)
2.交叉熵
三、总结
四、tensorflow相应函数
1.MSE
2.交叉熵
一、loss函数定义
loss函数的作用就是描述模型的预测值与真实值之间的差距大小。我的理解是寻找一个标准来帮助训练机制随时优化参数,以便于找到网络的最高精度下的参数。这个标准不难理解,与我们日常生活中的很多事情一致,例如倒车入库,在你倒车的同时肯定会一边打方向盘一边看倒后镜一样(当然具备自动倒车入库功能的车除外),根据倒后镜中看到的停车线,随时调整以便能够准确入库,这个停车线就是标准。更通俗的来说,loss函数就是指导模型在训练过程中朝着收敛的方向前进。
二、常见的loss算法种类
1.MSE(均值平方差)
数理统计中演化而来,均方误差是指参数估计值和参数真实值之差平方的期望值。在此处其主要是对每个预测值与真实值作差求平方的平均值,具体公式如下所示:
MSE越小代表模型越好,类似的算法还包括RMSE和MAD。
2.交叉熵
交叉熵(crossentropy)刻画了两个概率分布之间的距离,更适合用在分类问题上,因为交叉熵表达预测输入样本属于某一类的概率。其公式如下所示:
与MSE一样,交叉熵也是值越小代表模型精度越高。
三、总结
loss函数的选取取决于输入标签数据的类型:若输入的是实数、无界的值,损失函数使用平方差;若输入标签是位矢量(分类标志),使用交叉熵更适合。此外预测值与真实值要采用同样的数据分布,以便于loss函数取得更佳的效果。
四、tensorflow相应函数
由于博主是基于tensorflow的框架来学习深度学习,之后的每篇文章最后一部分都会介绍tensorflow相应函数。
1.MSE
tensorflow没有单独的MSE函数,不过可由开发者自己组合即可,如下所示:
#logits为真实值,outputs为预测值
MSE = tf.reduce_mean(tf.square(logits-outputs)))
RMSE = tf.sqrt(tf.reduce_mean(tf.square(logits-outputs)))
mad = tf.reduce_mean(tf.complex_abs(logits-outputs))
2.交叉熵
tensorflow具有多种常见的交叉熵函数:
#Sigmoid交叉熵
tf.nn.simoid_cross_entropy_with_logits(logits,target,name=None)
#softmax交叉熵
tf.nn.softmax_cross_entropy_with_logits(logits,target,name=None)
#Sparse交叉熵
tf.nn.sparse_cross_entropy_with_logits(logits,target,name=None)
#加权Sigmoid交叉熵
tf.nn.weighter_cross_entropy_with_logits(logits,target,pos_weight,name=None)
参考文献:
1.《深度学习之tensorflow》