先上三个例子,可能你就已经懂得了。detach()torch.no_grad() 都可以实现相同的效果,只是前者会麻烦一点,对每一个变量都要加上,而后者就不用管了。

x = torch.tensor(2., requires_grad=True)
y = torch.tensor(3., requires_grad=True)
z = 2 * x * y
print(z.requires_grad) # True
x = torch.tensor(2., requires_grad=True)
y = torch.tensor(3., requires_grad=True)
with torch.no_grad():z = 2 * x * y
print(z.requires_grad) # False
x = torch.tensor(2., requires_grad=True)
y = torch.tensor(3., requires_grad=True)
z = 2 * x * y.detach()
print(z.requires_grad) # True
x = torch.tensor(2., requires_grad=True)
y = torch.tensor(3., requires_grad=True)
z = 2 * x.detach() * y.detach()
print(z.requires_grad) # False

再具体说说他们两者的功能或者效果吧

detach() 会返回一个新的Tensor对象,不会在反向传播中出现,是相当于复制了一个变量,将它原本requires_grad=True变为了requires_grad=False

torch.no_grad() 通常是在推断(inference)的时候,用来禁止梯度计算,仅进行前向传播。在训练过程中,就像画了个圈,来,在我这个圈里面跑一下,都不需要计算梯度,就正向传播一下。

【Pytorch】区分detach()和torch.no_grad()相关推荐

  1. 通俗讲解Pytorch梯度的相关问题:计算图、torch.no_grad、zero_grad、detach和backward;Variable、Parameter和torch.tensor

    文章目录 with torch.no_grad()和requires_grad backward() Variable,Parameter和torch.tensor() zero_grad() 计算图 ...

  2. 【深度学习】pytorch自动求导机制的理解 | tensor.backward() 反向传播 | tensor.detach()梯度截断函数 | with torch.no_grad()函数

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.pytorch里自动求导的基础概念 1.1.自动求导 requires_grad=True 1.2.求导 requ ...

  3. 【pytorch】 grad、grad_fn、requires_grad()、with torch.no_grad() 、net.train()、net.eval():记录一次奇怪的debug经历

    刚开始接触pytorch框架时,最让我觉得神奇的就是它居然可以–自 动 求 导 ! 于是我开始尝试理解内部的运行机制,但很快放弃了,直接当成黑盒使用-- 最近又遇到一个奇怪的bug,让我不得不去学一下 ...

  4. 详解Pytorch中的requires_grad、叶子节点与非叶子节点、with torch.no_grad()、model.eval()、model.train()、BatchNorm层

    requires_grad requires_grad意为是否需要计算梯度 使用backward()函数反向传播计算梯度时,并不是计算所有tensor的梯度,只有满足下面条件的tensor的梯度才会被 ...

  5. pytorch之with torch.no_grad

    在使用pytorch时,并不是所有的操作都需要进行计算图的生成(计算过程的构建,以便梯度反向传播等操作).而对于tensor的计算操作,默认是要进行计算图的构建的,在这种情况下,可以使用 with t ...

  6. 【Pytorch】model.train()和model.eval()用法和区别,以及model.eval()和torch.no_grad()的区别

    model.train() 启用 Batch Normalization 和 Dropout 如果模型中有BN层(Batch Normalization)和Dropout,需要在训练时添加model. ...

  7. pytorch的训练测试流程总结,以及model.evel(), model.train(),torch.no_grad()作用

    pytorch的 model.eval()和model.train()作用 pytorch中model.train()和model.eval()的区别主要在于Batch Normalization和D ...

  8. Pytorch的model.train() model.eval() torch.no_grad() 为什么测试的时候不调用loss.backward()计算梯度还要关闭梯度

    使用PyTorch进行训练和测试时一定注意要把实例化的model指定train/eval model.train() 启用 BatchNormalization 和 Dropout 告诉我们的网络,这 ...

  9. Pytorch:model.train()和model.eval()用法和区别,以及model.eval()和torch.no_grad()的区别

    model.train()和model.eval()的区别主要在于Batch Normalization和Dropout两层. model.train() 官方文档 启用 Batch Normaliz ...

最新文章

  1. Android配置启动界面:Activity基本使用
  2. 【2012百度之星/资格赛】B:小诺爱USB设备
  3. Emscripten-mac安装与升级
  4. gitlab修改配置重启_centos7下gitlab安装说明
  5. github迁移到gitee相关问题
  6. Java技术回顾之JNDI--JNDI API
  7. 【Jmeter篇】Jmeter踩坑记(一)
  8. 二分答案——进击的奶牛(洛谷 P1824)
  9. python 反传播_Python:反向传播 (六十八)
  10. 超详细软件著作权申请——资料篇
  11. Java用OpenOffice将word转换为PDF并预览
  12. 【随笔】诺贝尔奖提名探索
  13. 【代码段】动态生成页面heading
  14. Jointly Embedding Knowledge Graphs and Logical Rules
  15. nat流量,业务流量_10种增加在线业务流量的方法
  16. 618买什么蓝牙耳机最划算?四款高品质蓝牙耳机测评
  17. android画板案例
  18. One_hot和Word2Vec两种词向量方法的原理及比较
  19. NeurIPS 2022 | MoVQ: 基于Modulating Quantized Vectors的高保真图像生成
  20. 『VQA认知』如何理解Bias?

热门文章

  1. win10系统localhost拒绝访问的解决方法
  2. 知道计算机组装,电脑组装不担心被电脑店套路,就要懂得如何查看电脑的硬件配置...
  3. [Demo示例]爬取豆瓣FM个人收藏歌曲“红心列表”
  4. 牛客练习赛43 Tachibana Kanade Loves Review C(最小生成树Kruskal)
  5. 判断平年还是闰年,一个月有多少天,一年的第几天
  6. 3种方法教你如何做笔记
  7. 圆满完成深软协与赛宝合办的安全测试技术培训!
  8. 昂首阔步迈入大数据时代
  9. [ERP]IQC,IPQC,PQC,FQC,OQC是什么意思?是干什么的?
  10. 用C#输出99乘法表