pytorch学习:loss为什么要加item()

2023-11-18

作者:陈诚
链接:https://www.zhihu.com/question/67209417/answer/344752405
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

PyTorch 0.4.0版本去掉了Variable,将Variable和Tensor融合起来,可以视Variable为requires_grad=True的Tensor。其动态原理还是不变。在获取数据的时候也变得更优雅:使用loss += loss.detach()来获取不需要梯度回传的部分。或者使用loss.item()直接获得所对应的python数据类型。============================================================

以下为原回答:算是动态图的一个坑吧。记录loss信息的时候直接使用了输出的Variable。应该不止我经历过这个吧…久久不用又会不小心掉到这个坑里去…for data, label in trainloader:

    loss = criterion(out, label)
    loss_sum += loss     # <--- 这里

运行着就发现显存炸了观察了一下发现随着每个batch显存消耗在不断增大…参考了别人的代码发现那句loss一般是这样写 /(ㄒoㄒ)/

loss_sum += loss.data[0]

这是因为输出的loss的数据类型是Variable。而PyTorch的动态图机制就是通过Variable来构建图。主要是使用Variable计算的时候,会记录下新产生的Variable的运算符号,在反向传播求导的时候进行使用。如果这里直接将loss加起来,系统会认为这里也是计算图的一部分,也就是说网络会一直延伸变大

那么消耗的显存也就越来越大

总之使用Variable的数据时候要非常小心。不是必要的话尽量使用Tensor来进行计算… 包括数据的输入时候,如果“过早”把数据丢到Variable里面去,那么可能也会被系统视为网络的一部分。所以,要投入的时候再把数据丢到Variable里面去吧~题外话想更多感受动态图的话,可以通过Variable的grad_fun来观察到该Variable是通过什么运算得到的(前提是前面的Variable的required_grad置为True)。

大概是这样

z = x + y
z.grad_fn
out:
<AddBackward1 at 0x107286240>

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

pytorch学习:loss为什么要加item() 的相关文章

随机推荐

  • java类型转换小细节之BigDecimal转String

    public static void main String args 浮点数的打印 System out println new BigDecimal 10000000000 toString 普通的数字字符串 System out pr
  • linux配置虚拟IP地址方法

    linux配置虚拟IP地址方法 在日常linux管理工作中 需要为应用配置单独的IP地址 以达到主机与应用的分离 在应用切换与迁移过程中可以做到动态切换 特别是在使用HA的时候 这种方案可以保证主机与应用的隔离 对日常的运维有很大的益处 但
  • DDL与DML的区别

    DML Data Manipulation Language 数据操纵语言 适用范围 对数据库中的数据进行一些简单操作 如insert delete update select等 DDL Data Definition Language 数
  • 如何排查 Electron V8 引发的内存 OOM 问题

    经过长达大半年时间的崩溃治理后 基于 Electron 框架开发的新版 PC 淘宝直播推流客户端的稳定性终于赶超基于QT 框架开发的旧版本了 剩下的崩溃问题中有 40 是跟内存 OOM 有关 其中 V8FatalErrorCallback
  • 堆栈常量池

    堆栈常量池详解 例子 转自 http www iteye com topic 634530 一 概述 寄存器 最快的存储区 由编译器根据需求进行分配 我们在程序中无法控制 栈 stack 存放基本类型的变量数据和对象的引用 但对象本身不存放
  • 在myeclipse拷贝项目时候经常遇到的问题

    我们有事为了省事 在myeclipse中拷贝一个web项目 然后复制下来 改改里面的内容就直接放到tomcat中运行 会发现找不到路径 然而地址栏什么的都正确 这是为什么那 仔细找找你会发现原来是 这个项目的入口没有改 你用的还是上一个项目
  • m3u8视频下载器

    文章目录 前言 一 获取网站的m3u8文件url 二 使用步骤 1 修改配置文件 2 运行py或者exe 总结 前言 有的时候看个视频太卡了 就想把视频搞下来 一些网站吧 它不让下载 而且还是ts流视频 于是就做了个m3u8视频下载器第一版
  • SQL如何分析用户复购?(复购率、表连接)

    题目 表名为 购买记录表 里记录某在线教育平台的用户购买记录 包含字段 用户id 购买时间 课程类型 消费金额 问题 分析出每日首次购买用户的次月 第三月 第四月复购情况如何 解题思路 1 群组分析方法 这类复购问题的取数方式是群组分析方法
  • GAMES101:作业3

    GAMES101 作业3 附其他所有作业超链接如下 Games101 作业0 作业0 Games101 作业1 作业1 Games101 作业2 作业2 Games101 作业3 作业3 Games101 作业4 作业4 Games101
  • python课程预告_2月27日直播课程预告

    明天硬核直播课程的预告 1 10 00 赖晓铮老师的 零代码FPGA图形化编程十日谈 明天讲时序逻辑电路的重要组成部分 计数器 本节需要熟悉基于触发器和组合逻辑的计数器电路模型 还会讲到秒表 电子钟和按键消抖电路的计数器应用示例 以及基于计
  • VS2017卡在登录界面问题

    文章目录 前言 分析 总结 参考链接 前言 之前一直在用VS2017来进行C 开发工作 今天打开软件 提示需要登录才能继续使用 但是在登录时 发现一直卡在登录界面 无法继续 如下图 分析 这里感觉是微软服务器连接不上导致的 所以在网上搜索了
  • 搭建MariaDB Gelera Cluster数据库集群

    基础准备 node1 node2 node3 yum源 三节点 安装并初始化数据库 三节点 配置数据库文件 三节点 node2 3 登录数据库 并赋予root用户远程权限后关闭数据库 三节点 启动数据库集群 验证集群功能 查看到wsrep
  • 适合男生的6个副业项目

    现在社会越来越激烈 大家都想在工作之余挣点外快 甚至实现财务自由 本文就为你们介绍几种适合男生从事的副业项目 1 成为自媒体达人 自媒体运营就是你在社交网络 博客 视频平台等自由发挥创作才华 发布内容 并从中赚钱的副业方式 随着智能手机和网
  • 以太坊geth客户端安装经历,也是艰难的一笔。

    现在开始通过看B站的视频学习以太坊 作为入门你看完基本理论肯定是要自己安装geth客户端的 可我缺出现了一些问题 首先我是liunx系统 通过putty软件连接的阿里云 在上面经行一些基本操作 对liunx指令一窍不通的我也是开始liunx
  • Spark项目实战-集群SSH免密码登录

    首先我们会根据之前的CentOS安装教程再搭建sparkproject2和sparkproject3两台虚拟机机器 然后在这基础上配置三台机器之间的ssh免密码登录 1 在三台机器的 etc hosts文件中 都配置对三台机器的ip hos
  • .NET 页面间传值的几种方法

    1 QueryString 这是最简单的传值方式 但缺点是传的值会显示在浏览器的地址栏中且不能传递对象 只适用于传递简单的且安全性要求不高的数值 传递 location href WebForm2 aspx name yourName 接收
  • 刷脸支付就是个破局的大杀器

    科技推动创新 改变产业链格局 从二维码支付爆发取代刷银行卡支付后 传统银行一直担忧的金融脱媒挑战实际上已是即成现实 尽管从监管层面上 一系列如 断直联 二维码互通 等监管要求 对金融机构有较大利好 但在二维码支付时代 大局已定 缺乏C端运营
  • 腾讯文件和微云服务器,网盘Web客户端对比:腾讯微云支持32GB单文件上传

    网盘Web客户端对比 腾讯微云支持32GB单文件上传 网盘最基本的客户端就是Web客户端 为了让这个最基本的客户端更好用 除了网易网盘以及新浪微盘外 其余几款网盘都有提供浏览器插件的下载 这些插件主要提供三个重要的功能 分别是大文件上传 断
  • matlab GUI窗口最大化,以及控件大小和字体自适应

    1 GUI 窗口最大化 双击除控件外的空白处 视图 属性检查器 resize on即可 设置完这个 当放大的时候 会发现我们控件的位置没有变化 此时我们需要设置一个 工具 GUI选项 调整大小的方式 成比例 2 控件大小和字体自适应 当我们
  • pytorch学习:loss为什么要加item()

    作者 陈诚 链接 https www zhihu com question 67209417 answer 344752405 来源 知乎 著作权归作者所有 商业转载请联系作者获得授权 非商业转载请注明出处 PyTorch 0 4 0版本去