NLL_LOSS与CROSS_ENTROPY_LOSS详解
NLL_LOSS, CROSS_ENTROPY_LOSS详解
- 常用损失函数
- nll
- cross_entropy
- 一段代码
- transformer中的一段经典代码
常用损失函数
nll
官方文档
torch.nn.functional.nll_loss(input, target, weight=None, size_average=None,
ignore_index=- 100, reduce=None, reduction='mean')
- input,(N,C);target,(N);weight,(C)input, (N, C); \ target,(N);\ weight,(C)input,(N,C); target,(N); weight,(C)
- N,CN,CN,C分别为批大小batch_size和类别数class_num
- reduction及函数含义:选取target对应下标的结果,在batch维,求和(reduction=‘sum’)或求平均(mean)或不操作(none)作为结果。
size_average和reduce作用类似,应该不用管。 - 返回值形状为(1)(1)(1)或(N)(none情况下)(N) (none情况下)(N)(none情况下)。
- ignore_index为忽略指定下标的值,不参与计算以及梯度传递。
cross_entropy
torch.nn.functional.cross_entropy(input, target, weight=None, size_average=None,ignore_index=- 100, reduce=None, reduction='mean', label_smoothing=0.0)
- 参数和返回值与NLL_LOSS基本一致。
- 含义:nll取下标的结果先softmax后取对数,并加负号。 −log(softmax(nll(X)))-log(softmax(nll(X)))−log(softmax(nll(X)))
此处softmax即exp(下标结果)与∑exp(每个结果)比值。
log即ln自然对数。 - 解释:softmax首先得到一个类似概率的结果,取值(0,1),然后取对数为一个负值结果,在加上符号得到一个正的损失值。
当下标对应值结果大时,softmax结果更接近1,取log的负值越接近0,损失值也就越小(越接近0)。
同理,下标对应值小时,softmax结果接近0,取log的结果为负无穷,损失值为正无穷。
一段代码
def loss_fn(out, tar):out = out.view(-1, out.shape[-1])tar = tar.view(-1)return F.cross_entropy(out, tar, ignore_index=2) # pad
transformer中的一段经典代码
- 此处比较结果out与tar目标值,来计算损失。
- 变量形状:out为(N,L,C)(N, L, C)(N,L,C),tar为(N,L)(N, L)(N,L)。其中L为句子长度,需要针对每个词计算损失。
- 这里在使用前先将out和tar通过view转为了(N∗L,C)(N*L,C)(N∗L,C)和(N∗L)(N*L)(N∗L)形状,然后再来计算每个词的损失。
- 不转的话,按照函数定义,需要将out中的C转到第二维(中间)(N,C,L)。
- ignore_index为忽略下标为2的tar结果,此处为pad填充,即transformer中mask掉的值。
- 最终结果为每个词的损失的平均值。
NLL_LOSS与CROSS_ENTROPY_LOSS详解相关推荐
- [转载]用数据说话 Pytorch详解NLLLoss和CrossEntropyLoss
[转载]用数据说话 Pytorch详解NLLLoss和CrossEntropyLoss https://www.cnblogs.com/jiading/p/11979391.html NLL_Los ...
- PointNet系列代码复现详解(1)—PointNet分类部分
想尽快入门点云,因此就从这个经典的点云处理神经网络开始.源码已经有了中文注释,但在一些对于自己不理解的地方添加了一些注释.欢迎大家一起讨论. 代码是来自github:GitHub - yanx27/P ...
- Label Smoothing标签平滑详解+Pytorch保姆级实际操作
目录 简介 从提出Label Smoothing的论文出发 不使用LS时的情况 不使用LS时可能带来的问题 LS作为正则化的一种方式 具体操作 为何LS可以避免偏激的输出 对LS的另一个角度理解 Py ...
- 从命令行到IDE,版本管理工具Git详解(远程仓库创建+命令行讲解+IDEA集成使用)
首先,Git已经并不只是GitHub,而是所有基于Git的平台,只要在你的电脑上面下载了Git,你就可以通过Git去管理"基于Git的平台"上的代码,常用的平台有GitHub.Gi ...
- JVM年轻代,老年代,永久代详解
秉承不重复造轮子的原则,查看印象笔记分享连接↓↓↓↓ 传送门:JVM年轻代,老年代,永久代详解 速读摘要 最近被问到了这个问题,解释的不是很清晰,有一些概念略微模糊,在此进行整理和记录,分享给大家.在 ...
- docker常用命令详解
docker常用命令详解 本文只记录docker命令在大部分情境下的使用,如果想了解每一个选项的细节,请参考官方文档,这里只作为自己以后的备忘记录下来. 根据自己的理解,总的来说分为以下几种: Doc ...
- 通俗易懂word2vec详解词嵌入-深度学习
https://blog.csdn.net/just_so_so_fnc/article/details/103304995 skip-gram 原理没看完 https://blog.csdn.net ...
- 深度学习优化函数详解(5)-- Nesterov accelerated gradient (NAG) 优化算法
深度学习优化函数详解系列目录 深度学习优化函数详解(0)– 线性回归问题 深度学习优化函数详解(1)– Gradient Descent 梯度下降法 深度学习优化函数详解(2)– SGD 随机梯度下降 ...
- CUDA之nvidia-smi命令详解---gpu
nvidia-smi是用来查看GPU使用情况的.我常用这个命令判断哪几块GPU空闲,但是最近的GPU使用状态让我很困惑,于是把nvidia-smi命令显示的GPU使用表中各个内容的具体含义解释一下. ...
最新文章
- 基础设施即服务系列:Windows Azure 虚拟网络概述
- 从入职到离职创业,我在谷歌、亚马逊的八年
- ps-axure学习之感受
- 2021-04-05 Python tqdm显示代码任务进度
- Java基础day7
- 一定要会的synchronized关键字的用法
- php格式转为jpg格式,如何在PHP中将所有图像转换为JPG格式?
- linux系统电脑接硬盘盒,在linux系统下添加新硬盘
- C#操作Word书签模板
- matlab中计算sinad,图解射频天线指标,秒懂!
- 下载谷歌瓦片地图并拼接为高清大图
- 我九点钟上计算机课用英语怎么说,人教版四年级英语下册 第5次课 Unit 2 What time is it 时间的表达方式...
- Failed to start LSB: Bring up/down错误解决方法
- Python计算时间差天数
- vue element 的el-checkbox-group默认全部选中
- DWH中增量数据的抽取
- 图像算法原理与实践——图像修复之 全变分模型
- CocosCreator黄金矿工资源工程文件
- 写了一个新浪微博自动加粉的挂机小工具
- 枸杞的功效与食用方法