损失函数:categorical_crossentropy

损失函数讲解合集

binary_crossentropy
categorical_crossentropy

概述

本文讲解的是categorical_crossentropy损失函数,categorical_crossentropybinary_crossentropy比较容易混淆,想了解binary_crossentropy可以点击查看。本文将通过数学公式+代码的形式讲解。

正文

公式分析

categorical_crossentropy损失函数的公式如下(一般搭配softmax激活函数使用):
在这里插入图片描述
根据公式我们可以发现,因为yi,要么是0,要么是1。而当yi等于0时,结果就是0,当且仅当yi等于1时,才会有结果。也就是说categorical_crossentropy只专注与一个结果,因而它一般配合softmax做单标签分类。

代码分析

接下来我分别用tensorflow的api,以及列出详细结算过程这两种方法带大家体验一下计算。
举例1:当batch_size为1,输出shape为(1,1,2)时

使用tensorflow api计算:

import tensorflow as tf
y_true = [[[0.,1.]]]
y_pred = [[[0.4,0.6]]]# 假设已经经过了softmax,所以和必须为1
loss = tf.keras.losses.categorical_crossentropy(y_true, y_pred)
loss.numpy()
输出:
array([[0.5108256]], dtype=float32)

根据公式计算:

loss = -( 0*tf.math.log(0.4) + 1*tf.math.log(0.6) )
loss
输出:
<tf.Tensor: shape=(), dtype=float32, numpy=0.5108256>

可以看到它们结果一样
举例2:当batch_size为1,输出shape为(1,1,4)时

使用tensorflow api计算:

import tensorflow as tf
y_true = [[[0.,0.,1.,0.]]]
y_pred = [[[0.1,0.6,0.1,0.2]]]# 假设已经经过了softmax,所以和必须为1
loss = tf.keras.losses.categorical_crossentropy(y_true, y_pred)
loss.numpy()
输出:
array([[2.3025851]], dtype=float32)

根据公式计算:

loss = -( 0*tf.math.log(0.1) +
          0*tf.math.log(0.6) +
          1*tf.math.log(0.1) +
          0*tf.math.log(0.2) )
loss
输出:
<tf.Tensor: shape=(), dtype=float32, numpy=2.3025851>

可以看到它们结果一样

MORE

binary_crossentropy
categorical_crossentropy

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章