1 导论

本文阅读时长约为3分钟。
在今年的三大顶会中,利用pytorch做研究的论文已经一枝独秀,这归功于它的易操作性。当然,pytorch中也有一些需要注意的点,如自加和普通加,在一般的语言中两者等价,在pytorch中则是不一致的,是新手常会踩的一个坑,需要理解与掌握。

2 pytorch中的自加(+=)普通加

pytorch有些特殊,普通的加法如果赋给原来的值,其实质上是新开了一个变量,而不是传统意义上的覆盖原来的地址和值。话不多说,上代码:

    a = torch.ones((1, ))print(id(a), a)    ## 输出其地址(id)及数值 a = a + torch.ones((1, ))print(id(a), a)

其结果是

32258872 tensor([1.])
44322392 tensor([2.])

从上面可以看到,新赋值得到的a地址变为新的了,说明这个新开了一个变量。若想实现覆盖原来的值该怎么办呢?此时可以采用自加,及 += 符号来实现原位操作。类似于上面,继续上代码:

    a = torch.ones((1, ))print(id(a), a)    ## 输出其地址(id)及数值 a += torch.ones((1, ))print(id(a), a)

其结果是:

35666744 tensor([1.])
35666744 tensor([2.])

此时变量完全覆盖在原来的地址上,覆盖了原来的变量a,即为原位操作。

3 pytorch中的原位操作

为了方便进行原位操作,pytorch中的函数可以在调用之后加下划线 ,强调这是进行原位操作(在模型训练中经常用到的w.grad.zero() 即为原位更新,注意 _ 是放在()之前的),简单得用上述例子进行实现,上述操作也可以这样使用:

    a = torch.ones((1, ))print(id(a), a)    ## 输出其地址(id)及数值 a.add_(torch.ones((1,)))print(id(a),a)

输出结果也是:

35666744 tensor([1.])
35666744 tensor([2.])

然而,需要注意的是,此种用下划线 _ 的原位操作方法在面对叶子节点的时候不可以使用。因为叶子节点在迭代过程中需要被用到其他量或梯度的求解,不允许被更改,如果轻易被修改,会导致其他的值计算错误。

pytorch中自加(+=)与普通加的区别,及原位操作相关推荐

  1. **Pytorch 中view函数和reshape函数的区别*

    Pytorch 中view函数和reshape函数的区别(我是一名大一刚学计算机的学生 希望我的说法对你有帮助) 首先:要了解这个问题我们要先了解一个基本知识 张量的储存方式 跟据图片我们可以清楚的看 ...

  2. Pytorch中view()方法和resize()方法的区别

    1.view() 通过tensor.view方法可以调整tensor的形状,但必须保证调整前后元素总数一致.view不会修改自身的数据,返回的新tensor与源tensor共享内存,即更改其中一个,另 ...

  3. PyTorch中repeat、tile与repeat_interleave的区别

    . 目录 torch.Tensor.repeat torch.Tensor.tile torch.Tensor.repeat_interleave torch.Tensor.repeat repeat ...

  4. PyTorch中 tensor.detach() 和 tensor.data 的区别

    原文链接请参考:https://dreamhomes.top/posts/201906081516/ PyTorch0.4中,.data 仍保留,但建议使用 .detach(), 区别在于 .data ...

  5. PyTorch中的梯度累积

    我们在训练神经网络的时候,超参数batch_size的大小会对模型最终效果产生很大的影响,通常的经验是,batch_size越小效果越差:batch_size越大模型越稳定.理想很丰满,现实很骨感,很 ...

  6. Pytorch中的数据加载

    Pytorch中的数据加载 1. 模型中使用数据加载器的目的 在前面的线性回归模型中,使用的数据很少,所以直接把全部数据放到模型中去使用. 但是在深度学习中,数据量通常是都非常多,非常大的,如此大量的 ...

  7. 十九、Pytorch中的数据加载

    1. Pytorch中DataSet的使用方法 1.1 DataSet加载数据的方法 DataSet是Pytorch中用来表示数据集的一个抽象类,在torch中提供了数据集的基类torch.utils ...

  8. pytorch中的数据加载(dataset基类,以及pytorch自带数据集)

    目录 pytorch中的数据加载 模型中使用数据加载器的目的 数据集类 Dataset基类介绍 数据加载案例 数据加载器类 pytorch自带的数据集 torchvision.datasets MIN ...

  9. 【学习系列7】Pytorch中的数据加载

    目录 1. 模型中使用数据加载器的目的 2. 数据集类 3. 迭代数据集 1. 模型中使用数据加载器的目的 在前面的线性回归横型中,我们使用的数据很少,所以直接把全部数据放到锁型中去使用. 但是在深度 ...

最新文章

  1. bae index.php,【微信公众平台开发】之一:入门与BAE3.0下操作
  2. 微信支付代金券开发包分享
  3. C#字符串与unicode互相转换
  4. 聊聊 MySql 索引那些事儿
  5. 电信业务分类目录_第五大运营商!中信网络获基础电信业务牌照
  6. vue各种组件(不断增加中...)
  7. JS 微信公众号如何跳转到另一个微信公众号的链接
  8. 单片机一键开关机电路
  9. C++:[编程题]买帽子
  10. PHP unlink的使用
  11. “燕云十六将”之Shirley张艳(5)
  12. EXCEL双击文件打开是空白的
  13. java基础:网络编程(一)简介
  14. 《惢客创业日记》2021.06.21-22(周一)创业者融资成本有多高?
  15. linux-ARM开发板--嵌入式开发平台-选型
  16. 中职组网络安全关于体验C模块
  17. ABC人工蜂群算法求解函数优化实例C++(2020.11.5)
  18. php excel 模板 导出word,使用phpexcel导出excel和phpword导出word--简单使用
  19. 如何在jsp中连接SQLserver数据库
  20. 【大数据存储技术】第8章 其他NoSQL数据库

热门文章

  1. 如何登录腾讯云服务器的详细步骤
  2. 初次申请林业调查规划设计资质办理具备条件
  3. OpenCV-05-人脸识别
  4. 互联网不产生奸商,只是奸商学会上网了
  5. 大促当前,如何做一场美丽联合的架构融合
  6. SpringCloud补充与微服务面试题
  7. 关于Mantel Test
  8. 诸仙D3D游戏环境下如何实现真正D3D的窗口
  9. fsync fflush 相关
  10. Python 解答火车排序的问题:火车单向行驶:从左到右,一次标号每辆火车,入口出口只能被占用一次、那么如图所示。需要几列火车轨道满足要求?