tf.损失函数

《损失函数》

Loss function

损失函数:用于定义单个训练样本与真实值之间的误差。

Cost function

代价函数(成本函数):用于定义单个批次/整个训练集样本与真实值之间的误差。

Objective function

目标函数:泛指任意可以被优化的函数

 一,均方差 L2(MSE)与绝对差L1(MAE)

 

 L1:

  • 优点: 对离群点或者异常值会忽略掉。因为它的偏导永远是1或-1。跟loss大小无关。
  • 缺点: 即使接近0点处的导数也是1或-1,使得求解效率低下,导致收敛速度慢

L2:

  • 优点: 当loss偏差越大,梯度下降越快,收敛就快,使梯度更新的方向可以更加精确。
  • 缺点: 对异常值十分敏感,梯度更新的方向很容易受离群点所主导,不具备鲁棒性

如果异常值对于实际业务非常重要,我们可以使用MSE;

如果异常值仅仅表示损坏的数据,那我们应该选择MAE作为损失函数。

此外,考虑到收敛速度,在大多数的卷积神经网络中(CNN)中,我们通常会选择L2损失
因为这个差异要被平方放大,所以就会表现出越小的距离( −1≤x≤1 ),对于大的平方后就会放大。

 一、对于连续值向量的回归问题,
        loss='mse') # 均方误差
二、对于二分类问题:
        loss='binary_crossentropy', # 二元交叉熵损失函数
三、对于多分类问题,标签是序号数值编码,如1,2,3,4,5,
        loss='sparse_categorical_crossentropy', # 稀疏分类交叉熵损失函数

        ==>  y_=tf.keras.utils.to_categorical(y_)

                loss='categorical_crossentropy', # 分类交叉熵损失函数

                注意:虽然标签只有一个数字,但其内部自动转化为one-hot训练的,所以输出点            数是one-hot编码后的数量,而不是一个。
四、对于多分类问题,如果标签是one-hot编码:
       loss='categorical_crossentropy', # 分类交叉熵损失函数

五、对于序列问题,如语音识别等,则可以用时序分类

      (Connectionist Temporal Classification, CTC) 等损失函数。

keras.内置的损失函数

内置的损失函数一般有类的实现函数的实现两种形式。

     如:类:CategoricalCrossentropy 有大写 和 函数:categorical_crossentropy全小写 

常用的一些内置损失函数说明如下。 

  • mean_squared_error(平方差误差损失,用于回归,简写为 mse, 类实现形式为 MeanSquaredError 和 MSE)
  • mean_absolute_error (绝对值误差损失,用于回归,简写为 mae, 类实现形式为 MeanAbsoluteError 和 MAE)
  • Huber(Huber损失,只有类实现形式,用于回归,介于mse和mae之间,对异常值比较鲁棒,相对mse有一定的优势)
  • mean_absolute_percentage_error (平均百分比误差损失,用于回归,简写为 mape, 类实现形式为 MeanAbsolutePercentageError 和 MAPE)
  • 以上用于回归线性,以下用于离散分类
  • binary_crossentropy(对数二元交叉熵,用于二分类,类实现形式为 BinaryCrossentropy)
  • categorical_crossentropy(类别交叉熵,用于多分类,要求label为one-hot编码,类实现形式为 CategoricalCrossentropy)
  • sparse_categorical_crossentropy(稀疏类别交叉熵,用于多分类,要求label为序号编码形式,类实现形式为 SparseCategoricalCrossentropy)      注意,使用该函数时仍然需要你的标签与输出值的维度相同,你可能需要在标签数据上增加一个维度:np.expand_dims(y,-1)
  • hinge(合页损失函数,用于二分类,最著名的应用是作为支持向量机SVM的损失函数,类实现形式为 Hinge)
  • kld(相对熵损失,也叫KL散度,常用于最大期望算法EM的损失函数,两个概率分布差异的一种信息度量。类实现形式为 KLDivergence 或 KLD)
  • cosine_similarity(余弦相似度,可用于多分类,类实现形式为 CosineSimilarity)


mean_squared_logarithmic_error或msle
squared_hinge
hinge
categorical_hinge
logcosh
kullback_leibler_divergence:从预测值概率分布Q到真值概率分布P的信息增益,用以度量两个分布的差异.
poisson:即(predictions - targets * log(predictions))的均值
cosine_proximity:即预测值与真实标签的余弦距离平均值的相反数
注意: 当使用”categorical_crossentropy”作为目标函数时,标签应该为多类模式,即one-hot编码的向量,而不是单个数值. 可以使用工具中的to_categorical函数完成该转换.示例如下:     

   from keras.utils.np_utils import to_categorical

   categorical_labels = to_categorical(int_labels, num_classes=None)

 交叉熵API与公式

# 使用API求交叉熵
result1 = tf.nn.softmax_cross_entropy_with_logits(labels=labels,logits=logits)
# 使用公式求交叉熵

logits_scaled = tf.compat.v1.nn.softmax(logits)
result3 = - tf.compat.v1.reduce_sum (labels*tf.compat.v1.log(logits_scaled),1)

API 相当于=  nn.softmax()  +  公式

from tensorflow.python.ops import nn

import tensorflow as tf

nn.sigmoid_cross_entropy_with_logits(labels=labels, logits=logits)))    #建议用下面_v2

nn.sigmoid_cross_entropy_with_logits_v2(labels=labels, logits=logits)))

tf.nn.sigmoid_cross_entropy_with_logits(labels=labels, logits=logits)))            #无 "_v2"

nn.sfotmax_cross_entropy_with_logits(labels=labels, logits=logits)))    #建议用下面_v2

nn.sfotmax_cross_entropy_with_logits_v2(labels=labels, logits=logits)))

tf.nn.sfotmax_cross_entropy_with_logits(labels=labels, logits=logits)))            #无 "_v2"

而在keras上体现为binary_crossentropy,用途与上面的tf.nn.sigmoid_cross_entropy_with_logits是一样的,但两者有差别:

  tf.nn.sigmoid_cross_entropy_with_logits还原了预计值和输出值在数学公式中的差值,但不是一种概率差。

  而binary_crossentropy则先把输出值进行概率包装后,再带入sigmoid_cross_entropy_with_logits数学公式中。

?平方差所惩罚的 是与 损失为同一数量级的情形。

交叉熵刻画的是实际输出(概率)与期望输出(概率)的距离,也就是交叉熵的值越小,两概率分布越接近。

熵:事物的不确定性(概率)。概率为0时熵最大,概率0.5时熵=0.

交叉熵:两个概率分布之间的比较(真实概率,预测概率),差越小,交叉熵越小,最小为0

求熵函数的log时,是以10、e还是2为底?虽然熵值以底越小熵越大,但对于同一底数的不同概率的熵(“不确定性程度”),它们之间比值 不管用哪个底值都完全一样

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值