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')
  1. input,(N,C);target,(N);weight,(C)input, (N, C); \ target,(N);\ weight,(C)input,(N,C); target,(N); weight,(C)
  2. N,CN,CN,C分别为批大小batch_size和类别数class_num
  3. reduction及函数含义:选取target对应下标的结果,在batch维,求和(reduction=‘sum’)或求平均(mean)或不操作(none)作为结果。
    size_average和reduce作用类似,应该不用管。
  4. 返回值形状为(1)(1)(1)或(N)(none情况下)(N) (none情况下)(N)(none情况下)。
  5. 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)
  1. 参数和返回值与NLL_LOSS基本一致。
  2. 含义:nll取下标的结果先softmax后取对数,并加负号。 −log(softmax(nll(X)))-log(softmax(nll(X)))−log(softmax(nll(X)))
    此处softmax即exp(下标结果)与∑exp(每个结果)比值。
    log即ln自然对数。
  3. 解释: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中的一段经典代码

  1. 此处比较结果out与tar目标值,来计算损失。
  2. 变量形状:out为(N,L,C)(N, L, C)(N,L,C),tar为(N,L)(N, L)(N,L)。其中L为句子长度,需要针对每个词计算损失。
  3. 这里在使用前先将out和tar通过view转为了(N∗L,C)(N*L,C)(N∗L,C)和(N∗L)(N*L)(N∗L)形状,然后再来计算每个词的损失。
  4. 不转的话,按照函数定义,需要将out中的C转到第二维(中间)(N,C,L)。
  5. ignore_index为忽略下标为2的tar结果,此处为pad填充,即transformer中mask掉的值。
  6. 最终结果为每个词的损失的平均值。

NLL_LOSS与CROSS_ENTROPY_LOSS详解相关推荐

  1. [转载]用数据说话 Pytorch详解NLLLoss和CrossEntropyLoss

    [转载]用数据说话  Pytorch详解NLLLoss和CrossEntropyLoss https://www.cnblogs.com/jiading/p/11979391.html NLL_Los ...

  2. PointNet系列代码复现详解(1)—PointNet分类部分

    想尽快入门点云,因此就从这个经典的点云处理神经网络开始.源码已经有了中文注释,但在一些对于自己不理解的地方添加了一些注释.欢迎大家一起讨论. 代码是来自github:GitHub - yanx27/P ...

  3. Label Smoothing标签平滑详解+Pytorch保姆级实际操作

    目录 简介 从提出Label Smoothing的论文出发 不使用LS时的情况 不使用LS时可能带来的问题 LS作为正则化的一种方式 具体操作 为何LS可以避免偏激的输出 对LS的另一个角度理解 Py ...

  4. 从命令行到IDE,版本管理工具Git详解(远程仓库创建+命令行讲解+IDEA集成使用)

    首先,Git已经并不只是GitHub,而是所有基于Git的平台,只要在你的电脑上面下载了Git,你就可以通过Git去管理"基于Git的平台"上的代码,常用的平台有GitHub.Gi ...

  5. JVM年轻代,老年代,永久代详解​​​​​​​

    秉承不重复造轮子的原则,查看印象笔记分享连接↓↓↓↓ 传送门:JVM年轻代,老年代,永久代详解 速读摘要 最近被问到了这个问题,解释的不是很清晰,有一些概念略微模糊,在此进行整理和记录,分享给大家.在 ...

  6. docker常用命令详解

    docker常用命令详解 本文只记录docker命令在大部分情境下的使用,如果想了解每一个选项的细节,请参考官方文档,这里只作为自己以后的备忘记录下来. 根据自己的理解,总的来说分为以下几种: Doc ...

  7. 通俗易懂word2vec详解词嵌入-深度学习

    https://blog.csdn.net/just_so_so_fnc/article/details/103304995 skip-gram 原理没看完 https://blog.csdn.net ...

  8. 深度学习优化函数详解(5)-- Nesterov accelerated gradient (NAG) 优化算法

    深度学习优化函数详解系列目录 深度学习优化函数详解(0)– 线性回归问题 深度学习优化函数详解(1)– Gradient Descent 梯度下降法 深度学习优化函数详解(2)– SGD 随机梯度下降 ...

  9. CUDA之nvidia-smi命令详解---gpu

    nvidia-smi是用来查看GPU使用情况的.我常用这个命令判断哪几块GPU空闲,但是最近的GPU使用状态让我很困惑,于是把nvidia-smi命令显示的GPU使用表中各个内容的具体含义解释一下. ...

最新文章

  1. 基础设施即服务系列:Windows Azure 虚拟网络概述
  2. 从入职到离职创业,我在谷歌、亚马逊的八年
  3. ps-axure学习之感受
  4. 2021-04-05 Python tqdm显示代码任务进度
  5. Java基础day7
  6. 一定要会的synchronized关键字的用法
  7. php格式转为jpg格式,如何在PHP中将所有图像转换为JPG格式?
  8. linux系统电脑接硬盘盒,在linux系统下添加新硬盘
  9. C#操作Word书签模板
  10. matlab中计算sinad,图解射频天线指标,秒懂!
  11. 下载谷歌瓦片地图并拼接为高清大图
  12. 我九点钟上计算机课用英语怎么说,人教版四年级英语下册 第5次课 Unit 2 What time is it 时间的表达方式...
  13. Failed to start LSB: Bring up/down错误解决方法
  14. Python计算时间差天数
  15. vue element 的el-checkbox-group默认全部选中
  16. DWH中增量数据的抽取
  17. 图像算法原理与实践——图像修复之 全变分模型
  18. CocosCreator黄金矿工资源工程文件
  19. 写了一个新浪微博自动加粉的挂机小工具
  20. 枸杞的功效与食用方法

热门文章

  1. 移动app测试的多样性_移动可用性测试(四):远程测试
  2. MIPI简介(一)——基础概念介绍
  3. java 使用NIO进行文件的读写
  4. 2018最值得期待:为AI提供基础云平台的海云捷迅
  5. 5G与物联网技术趋势分析
  6. SMART Talk
  7. 飞天加速之星得主怎样选择云服务器ECS?
  8. JavaScript实现音乐单曲循环
  9. 短视频app开发中,给短视频加水印的技术该如何实现
  10. Linuix 服务器cat log查看,快速定位 bug 最实用(实战总结)