损失函数:categorical_crossentropy

损失函数:categorical_crossentropy

    • 损失函数讲解合集
    • 概述
    • 正文
      • 公式分析
      • 代码分析
    • MORE

损失函数讲解合集

binary_crossentropy
categorical_crossentropy

概述

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

正文

公式分析

categorical_crossentropy损失函数的公式如下(一般搭配softmax激活函数使用):
损失函数:categorical_crossentropy_第1张图片
根据公式我们可以发现,因为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
输出:

可以看到它们结果一样
举例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
输出:

可以看到它们结果一样

MORE

binary_crossentropy
categorical_crossentropy

你可能感兴趣的:(人工智能,#,损失函数,#,tensorflow2.0教学,深度学习,python,tensorflow,机器学习)