損失函數: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

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