【Tensorflow】tensorflow中的损失函数介绍

tensorflow中的损失函数介绍

本文参考借鉴了:损失函数loss大大总结,地址:https://blog.youkuaiyun.com/qq_14845119/article/details/80787753
并参考官方文档整理而成。

一. 分类损失函数

1.二分类交叉熵损失sigmoid_cross_entropy:

在这里插入图片描述
Aliases:
tf.losses.sigmoid_cross_entropy(…):
使用tf.nn.sigmoid_cross_entropy_with_logits创建交叉熵loss.

tf.losses.sigmoid_cross_entropy(
    multi_class_labels,
    logits,
    weights=1.0,
    label_smoothing=0,
    scope=None,
    loss_collection=tf.GraphKeys.LOSSES,
    reduction=Reduction.SUM_BY_NONZERO_WEIGHTS
)

参数介绍:
1.multi_class_labels: [batch_size, num_classes] 目标整数标签位于{0,1}。
2.logits: Float [batch_size, num_classes] 网络的logits输出。
返回值:
与logits类型相同的加权损失张量。如果reduction为NONE,则它的形状与logits相同;否则,它是标量。

tf.nn.sigmoid_cross_entropy_with_logits

tf.nn.sigmoid_cross_entropy_with_logits(
    _sentinel=None,
    labels=None,
    logits=None,
    name=None
)

参数介绍:
logits and labels must have the same type and shape.
labels: [batch_size, num_classes]。目标整数标签位于{0,1}。
logits: Float [batch_size, num_classes] 。
name: A name for the operation (optional).
返回值:A Tensor of the same shape as logits with the componentwise logistic losses.[batch_size, num_classes]

tf.keras.losses.binary_crossentropy
可以使网络最后一层的激活函数为sigmoid/tanh, 再将loss设置为此objective。
y_true与y_pred形状相同,都为[batch_size,1]

tf.keras.losses.binary_crossentropy(
    y_true,
    y_pred,
    from_logits=False,
    label_smoothing=0
)
2.多分类交叉熵损失softmax_cross_entropy:

在这里插入图片描述
Aliases:
tf.losses.softmax_cross_entropy(…):
使用tf.nn.softmax_cross_entropy_with_logits创建交叉熵loss.

tf.losses.softmax_cross_entropy(
    onehot_labels,
    logits,
    weights=1.0,
    label_smoothing=0,
    scope=None,
    loss_collection=tf.GraphKeys.LOSSES,
    reduction=Reduction.SUM_BY_NONZERO_WEIGHTS
)

参数介绍:
onehot_labels: One-hot-encoded labels.
logits: Logits outputs of the network.
返回值:
与logits类型相同的加权损失张量。如果reduction为NONE,则它的形状与logits相同;否则,它是标量。

tf.losses.sparse_softmax_cross_entropy(…):
使用tf.nn.sparse_softmax_cross_entropy_with_logits创建交叉熵loss.

tf.losses.sparse_softmax_cross_entropy(
    labels,
    logits,
    weights=1.0,
    scope=None,
    loss_collection=tf.GraphKeys.LOSSES,
    reduction=Reduction.SUM_BY_NONZERO_WEIGHTS
)

参数介绍:
labels: [batch_size,] .And dtype int32 or int64. Each entry in labels must be an index in [0, num_classes).(非独热码)
logits: [batch_size, num_classes]. And dtype float16, float32 or float64.
返回值:与logits类型相同的加权损失张量。如果reduction为NONE,则它与labels具有相同的形状;否则,它是标量。

tf.nn.softmax_cross_entropy_with_logits
同时tf.nn.sparse_softmax_cross_entropy_with_logits.具有相同功能,但输入labels维度为[batch_size,]

tf.nn.softmax_cross_entropy_with_logits(
    _sentinel=None,
    labels=None,
    logits=None,
    dim=-1,
    name=None,
    axis=None
)

参数介绍:
labels: [batch_size, num_classes], each row of labels[i] must be a valid probability distribution.
logits: [batch_size, num_classes]。
dim: The class dimension. Defaulted to -1 which is the last dimension.
返回值:与labels具有相同的形状。

tf.keras.losses.categorical_crossentropy
输出单元可以用softmax激活,然后再用此损失函数。
输入参数维数:[batch_size,num_classes]
转成one-hot编码可用:
keras.utils.to_categorical(y, num_classes=None, dtype=‘float32’)

tf.keras.losses.categorical_crossentropy(
    y_true,
    y_pred,
    from_logits=False,
    label_smoothing=0
)

tf.keras.losses.sparse_categorical_crossentropy
输出单元可以用softmax激活,然后再用此损失函数。
y_true维数:[batch_size,] 即数字编码,非one-hot编码。

tf.keras.losses.sparse_categorical_crossentropy(
    y_true,
    y_pred,
    from_logits=False,
    axis=-1
)

二. 回归损失函数

1.MSE表示了预测值与目标值之间差值的平方和然后求平均。

在这里插入图片描述
L2损失表示了预测值与目标值之间差值的平方和然后开更方,L2表示的是欧几里得距离。
在这里插入图片描述
MSE和L2的曲线走势都一样。区别在于一个是求的平均np.mean(),一个是求的更方np.sqrt()

tf.losses.mean_squared_error(
    labels,
    predictions,
    weights=1.0,
    scope=None,
    loss_collection=tf.GraphKeys.LOSSES,
    reduction=Reduction.SUM_BY_NONZERO_WEIGHTS
)
tf.metrics.mean_squared_error(
    labels,
    predictions,
    weights=None,
    metrics_collections=None,
    updates_collections=None,
    name=None

参数介绍:
labels: The ground truth output tensor, same dimensions as ‘predictions’.
predictions: The predicted outputs.
metrics版本的返回值有两个:update_op,mean_squared_error,一般损失值在[1]。

Keras接口:mean_squared_error 或 mse

2.MAE表示了预测值与目标值之间差值的绝对值然后求平均

在这里插入图片描述
L1表示了预测值与目标值之间差值的绝对值,L1也叫做曼哈顿距离。
在这里插入图片描述
MAE和L1的区别在于一个求了均值np.mean(),一个没有求np.sum()。2者的曲线走势也是完全一致的。

tf.metrics.mean_absolute_error(
    labels,
    predictions,
    weights=None,
    metrics_collections=None,
    updates_collections=None,
    name=None
)

参数介绍:
labels: A Tensor of the same shape as predictions.
predictions: A Tensor of arbitrary shape.
返回值:update_op,mean_absolute_error

keras接口:mean_absolute_error或mae

3.Huber Loss和smooth L1:

Huber loss具备了MAE和MSE各自的优点,当δ趋向于0时它就退化成了MAE,而当δ趋向于无穷时则退化为了MSE。
在这里插入图片描述
Smooth L1 loss也具备了L1 loss和L2 loss各自的优点,本质就是L1和L2的组合。
在这里插入图片描述
Huber loss和Smooth L1 loss具有相同的曲线走势,当Huber loss中的δ等于1时,Huber loss等价于Smooth L1 loss。
在这里插入图片描述
对于Huber损失来说,δ的选择十分重要,它决定了模型处理局外点的行为。当残差大于δ时使用L1损失,很小时则使用更为合适的L2损失来进行优化。

Huber损失函数克服了MAE和MSE的缺点,不仅可以保持损失函数具有连续的导数,同时可以利用MSE梯度随误差减小的特性来得到更精确的最小值,也对局外点具有更好的鲁棒性。

但Huber损失函数的良好表现得益于精心训练的超参数δ。

tf.losses.huber_loss(
    labels,
    predictions,
    weights=1.0,
    delta=1.0,
    scope=None,
    loss_collection=tf.GraphKeys.LOSSES,
    reduction=Reduction.SUM_BY_NONZERO_WEIGHTS
)

参数介绍:
labels: The ground truth output tensor, same dimensions as ‘predictions’.
predictions: The predicted outputs.
返回值:Weighted loss float Tensor. If reduction is NONE, this has the same shape as labels; otherwise, it is scalar.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值