nn.CrossEntropyLoss()

1.引言

在使用pytorch深度学习框架做多分类时,计算损失函数通常会使用交叉熵损失函数nn.CrossEntropyLoss()

2. 信息量和熵

信息量:它是用来衡量一个事件的不确定性的;一个事件发生的概率越大,不确定性越小,则它所携带的信息量就越小。假设$X$是一个离散型的随机变量,其取值集合为$X$ = $x_0,x_1,,,x_n$,其概率分布函数为$p(x) = Pr(X = x),x\in X$,则定义事件$X = x_0$的信息量为:

$$

I(x_i) = -log(p(x_i))

$$

当$p(x_0) = 1$ 时,该事必定发生,其信息量为0。

熵用来衡量一个系统的混乱程度,代表系统中信息量的总和;熵值越大,表明这个系统的不确定性就越大。

信息量是衡量某个事件的不确定性,而熵是衡量一个系统(所有事件)的不确定性。

熵的计算公式:

$$

H(x) = -\sum_{i=1}^np(x_i)log(p(x_i))

$$

其中,$p(x_i)为事件X = x_i的概率,-log(p(x_i))为事件X = x_i 的信息量。$

可以看出,熵是信息量的期望值,是一个随机变量(一个系统,事件所有可能性)不确定性的度量。熵值越大,随机变量的取值就越难确定,系统也就越不稳定;熵值越小,随机变量的取值也就越容易确定,系统越稳定。

交叉熵 Cross Entropy

交叉熵主要是用来判定实际的输出与期望的输出的接近程度,也就是交叉熵的值越小,两个概率分布就越接近。假设概率分布p为期望输出,概率分布q为实际输出,$H(p,q)$为交叉熵,则表达式:

(1)二分类

$$

H(p,q) = \frac{1}{N}\sum_{i=1}^N H(p(x_i),q(x_i)) = \frac{1}{N}\sum_{i=1}^N -(p(x_i)log(q(x_i)))+(1-p(x_i))log(1-q(x_i))

$$

其中:

N表示一个batch的样本数

$p(x_i)$ 表示样本i的label,正类为1,负类为0

$q(x_i)$ 表示样本i预测为正的概率

(2)多分类

$$

H(p,q) = \frac{1}{N}\sum_{i=1}^N H(p(x_i),q(x_i)) = - \frac{1}{N}\sum_{i=1}^N \sum_{j=1}^M p(x_{ij})log(q(x_{ij}))

$$

其中:

M表示类别数

$p(x_{ij})$ 表示变量(0或1),如果该类别和样本i的类别相同就是1,否则是0;

$q(x_{ij})$ 表示对于观测样本i属于类别$j$的预测概率。

举例

x

Label

0

0

1

Pred

0.1

0.1

0.8

那么一个样本的loss为:

$loss= -(0 * log(0.1)+0*log(0.1)+1*log(0.8)) = 0.22$

pytorch中的交叉熵

在pytorch中,和我理解的交叉熵不一样。nn.CrossEntropyLoss()是nn.logSoftmax()和nn.NLLLoss()的整合,可以直接使用它来替换网络中的这两个操作。下面看一下官网的解释:

交叉熵损失函数python_交叉熵损失函数nn.CrossEntropyLoss()相关推荐

  1. 深入理解Pytorch负对数似然函数(torch.nn.NLLLoss)和交叉熵损失函数(torch.nn.CrossEntropyLoss)

    在看Pytorch的交叉熵损失函数torch.nn.CrossEntropyLoss官方文档介绍中,给出的表达式如下.不免有点疑惑为何交叉熵损失的表达式是这个样子的 loss ⁡ ( y , clas ...

  2. 二分类交叉熵损失函数python_二分类问题的交叉熵损失函数多分类的问题的函数交叉熵损失函数求解...

    二分类问题的交叉熵损失函数; 在二分类问题中,损失函数为交叉熵损失函数.对于样本(x,y)来讲,x为样本 y为对应的标签.在二分类问题中,其取值的集合可能为{0,1},我们假设某个样本的真实标签为yt ...

  3. 【TensorFlow】TensorFlow从浅入深系列之六 -- 教你深入理解经典损失函数(交叉熵、均方误差)

    本文是<TensorFlow从浅入深>系列之第6篇 TensorFlow从浅入深系列之一 -- 教你如何设置学习率(指数衰减法) TensorFlow从浅入深系列之二 -- 教你通过思维导 ...

  4. 【TensorFlow系列二】经典损失函数(交叉熵、均方差)

    ↑ 点击上方[计算机视觉联盟]关注我们 1.交叉熵 交叉熵是分类问题中使用比较广的一种损失函数,刻画了两个概率分布之间的距离. 给定两个概率分布p和q,通过q来表示p的交叉熵为: 交叉熵刻画的是两个概 ...

  5. 【深度学习】损失函数系列 (一) 平方损失函数、交叉熵损失函数 (含label_smoothing、ignore_index等内容)

    一.平方损失函数(Quadratic Loss / MSELoss): Pytorch实现: from torch.nn import MSELoss loss = nn.MSELoss(reduct ...

  6. 【数据挖掘】神经网络 后向传播算法( 向后传播误差 | 输出层误差公式 | 隐藏层误差公式 | 单元连接权值更新公式 | 单元偏置更新公式 | 反向传播 | 损失函数 | 误差平方和 | 交叉熵 )

    文章目录 I . 向后传播误差 简介 II . 输出层误差计算公式 III . 隐藏层层误差计算公式 IV . 使用误差更新 连接权值 V . 使用误差更新 单元偏置 VI . 反向传播 过程 VII ...

  7. 损失函数、python实现均方误差、交叉熵误差函数、mini-batch的损失函数

    损失函数 what is 损失函数 均方误差 交叉熵误差 计算mini-batch学习的损失函数 why 损失函数 what is 损失函数 神经网络学习目标是找到各层合适的权重参数w和偏置b,使得最 ...

  8. 机器学习中的损失函数(交叉熵损失、Hinge loss)

    损失函数 文章目录 损失函数 1 交叉熵损失 1.1 从最大似然估计到交叉熵损失 概率论中的MLE 机器学习中的MLE 交叉熵损失 1.2 多分类的交叉熵损失函数 1.3 比较 2. Hinge lo ...

  9. Pytorch深度学习笔记(02)--损失函数、交叉熵、过拟合与欠拟合

    目录 一.损失函数 二.交叉熵损失函数详解 1.交叉熵 2.信息量 3.信息熵 4.相对熵(KL散度) 5.交叉熵 6.交叉熵在单分类问题中的应用 7.总结: 三.过拟合和欠拟合通俗解释 1.过拟合 ...

最新文章

  1. python正规教育机构-Python培训机构多吗 选择Python培训这些你都知道吗
  2. java.util.Properties
  3. 《解读NoSQL》——2.6 通过数据库分片获得水平扩展能力
  4. python print_Python print()
  5. Swift5.1 语言指南(十七) 反初始化
  6. StyTr^2:Image Style Transfer with Transformers
  7. popmenu 和popWindow
  8. 四、PHP进阶学习之MySQL②
  9. Jmeter入参POST data乱码传入‘--VRES...SER--’的问题
  10. mapping.xml POJO的映射文件
  11. 交通运输大数据发展特点、政策、应用及趋势 | 交通运输部科学研究院黄莉莉
  12. pytorch--切断梯度的方法
  13. 【绘图杂记16】Echarts 热力矩阵图
  14. 包载羟基喜树碱的聚乙二醇化聚十六烷基氰基丙烯酸酯(PEG-PHDCA)纳米囊泡
  15. [n年以前的诗] 你别这样
  16. 中国国家气象局天气预报信息接口变动
  17. GPU地址空间的相关概念
  18. 系统架构领域的一些学习材料-林仕鼎
  19. 首届世界围棋混双赛,女棋手着装点评
  20. 随手记录: Macbook/MacOS 快速安装brew

热门文章

  1. Windows下使用python删除重复图片
  2. 录音切割开发php,录音截取软件(教程) 录音太长,想把它截成两段
  3. 合肥市noi计算机竞赛,2012年蜀山区青少年信息学(计算机)竞赛通知
  4. php实现生成订单功能,订单提交、生成订单功能开发
  5. 东南亚国家的商标注册小知识
  6. P.A.WORKS《来自缤纷世界的明日》制作团队全新原创动画《白砂的Aquatope》2021年7月开播!
  7. 关于两种常用特殊字符判断方法
  8. 理想的实现---上错大学入对行(转自开复学生网)
  9. ubuntu 16.04 ATI显卡 radeon VCE init error (-22)
  10. 基于飞凌AM5718的列车驾驶舱显示终端设计方案