tf.keras之损失函数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了tf.keras之损失函数相关的知识,希望对你有一定的参考价值。

参考技术A tf.keras里面有许多内置的损失函数可以使用,由于种类众多,以几个常用的为例:

BinaryCrossentropy是用来进行二元分类交叉熵损失函数的,共有如下几个参数

如果输入的from_logits是true,那么首先就要经过激活函数的处理。那对于一个[batch_size,num_class]的logits,进行sigmoid激活就是对将tensor中的每个元素x转为sigmoid(x).构成矩阵P, 代表的就是样本i属于标签j概率,即:

然后在这个基础上计算二分类的交叉熵,这里的二分类交叉熵是tensor中的每个元素都独立的,所以会有[batch_size,num_class]个loss,以下 表示真实的标签

然后在axis=-1维度做了reduce_mean操作,变成了[batch_size]维度的loss,最后再经过reduction里面指定的处理方法,再对batch求一次平均值。另外,这个方法如果在from_logits=True的情况下,可以用tf.nn.sigmoid_cross_entropy_with_logits来代替,阅读源码,在tf.keras里面就是调的这个函数,sigmoid_cross_entropy_with_logits返回的是[batch_size]个loss,最后我们再接一个reduce_mean就可以变成标量了。

CategoricalCrossentropy是用来处理多分类的,同样有以上这几个参数。但是激活函数不一样,使用的是softmax激活函数,softmax的过程如下

经过激活函数之后,每一行的元素代表了这个样本属于各类别的概率,并且概率和为1,即[batch_size,num_class]里面的每一行的和为1,然后进行交叉熵计算,这里和binary_cross_entropy不同,这里中间计算出来的loss的shape只有[batch_size]了。多分类是二分类的扩展,二分类可以看成两个互斥的标签,而多分类则是多个互斥的标签

SparseCategoricalCrossentropy损失函数同CategoricalCrossentropy类似,只是输入不一样,该损失函数的输入的y_true是[batch_size]个标签,每个元素是label对应的index,没有经过one-hot编码,这个方法如果在from_logits=True的情况下,和tf.nn.sparse_sigmoid_cross_entropy_with_logits再接一个reduce_mean是类似的效果。

MeanSquaredError损失函数(均方差)一般用来解决回归问题,参数只有两个,默认即可。

均方差就是y_pred语y_true对应元素的差的平方,然后求和在求平均

以上是关于tf.keras之损失函数的主要内容,如果未能解决你的问题,请参考以下文章

在 TF2/Keras 中正确实现 Autoencoder MSE 损失函数

tf.keras中度量和损失MSE之间的差异[重复]

TF/KERAS:将列表作为单个输出的损失传递

Tensorflow2深度学习基础和tf.keras

在 TensorFlow BinaryCrossentropy 损失函数中配置标签

tf.keras model.fit():在相同数据上火车损失和val损失之间的巨大差异