detach就是把网络中的一部分分量从反向传播的流程中拿出来,使之requires_grad=False

但是拿出来的时候,还是指向原向量的地址,所以对拿出来的向量进行操作的时候,也会影响原向量。

注意:使用detach返回的tensor和原始的tensor共同一个内存,即一个修改另一个也会跟着改变。

当使用detach()分离tensor但是没有更改这个tensor时,并不会影响backward()。

import torcha = torch.tensor([1, 2, 3.], requires_grad=True)
print(a.grad)
out = a.sigmoid()
print(out)#添加detach(),c的requires_grad为False
c = out.detach()
print(c)#这时候没有对c进行更改,所以并不会影响backward()
out.sum().backward()
print(a.grad)'''返回:
None
tensor([0.7311, 0.8808, 0.9526], grad_fn=<SigmoidBackward>)
tensor([0.7311, 0.8808, 0.9526])
tensor([0.1966, 0.1050, 0.0452])
'''

二、 tensor.detach_()

将一个tensor从创建它的图中分离,并把它设置成叶子tensor。

其实就相当于变量之间的关系本来是x -> m -> y,这里的叶子tensor是x。但是这个时候对m进行了m.detach_()操作,其实就是进行了两个操作:

(1)将m的grad_fn的值设置为None,这样m就不会再与前一个节点x关联,这里的关系就会变成x, m -> y,此时的m就变成了叶子结点;

(2)然后会将m的requires_grad设置为False,这样对y进行backward()时就不会求m的梯度》

总结:其实detach()和detach_()很像,两个的区别就是detach_()是对本身的更改【原地操作】,detach()则是生成了一个新的tensor。

比如x -> m -> y中如果对m进行detach(),后面如果反悔想还是对原来的计算图进行操作还是可以的。

但是如果是进行了detach_(),那么原来的计算图也发生了变化,就不能反悔了。

仅供自己学习使用,如有侵权,请联系。

一.detach()相关推荐

  1. detach detach_ pytorch

    pytorch中的detach和detach_ pytorch 的 Variable 对象中有两个方法,detach和 detach_ : detach 官方文档中,对这个方法是这么介绍的. 返回一个 ...

  2. pytorch: Variable detach 与 detach_

    pytorch 的 Variable 对象中有两个方法,detach和 detach_ 本文主要介绍这两个方法的效果和 能用这两个方法干什么. detach 官方文档中,对这个方法是这么介绍的. 返回 ...

  3. C++:多线程中的小白(2)线程启动、结束、创建线程、join、detach

    目录 一.范例演示:线程运行的开始和结束 二.其他创建线程的手法 一.范例演示:线程运行的开始和结束 (1)thrad (2)join()函数 (3)detach()函数 (4)joinable()函 ...

  4. java detach_线程 (detach的作用)

    线程状态 在一个线程的生存期内,可以在多种状态之间转换.不同操作系统可以实现不同的线程模型,定义许多不同的线程状态,每个状 态还可以包含多个子状态.但大体说来,如下几种状态是通用的: 就绪:参与调度, ...

  5. 第三节 线程传参详解、detach()大坑、成员函数做线程函数

    1.传递临时对象作为线程参数 原始的输入程序如下: #include <iostream> #include <thread>using namespace std;void ...

  6. 第二节 线程启动、结束、创建线程多个方法、join()、detach()

    1.范例演示线程运行的开始和结束 可执行程序运行起来,生成一个进程,该进程所属的主线程开始自动运行. #include <iostream> #include <vector> ...

  7. R语言attach函数、detach函数(全局注册或者全局解除)实战

    R语言attach函数.detach函数(全局注册或者全局解除)实战 目录 R语言attach函数.detach函数(全局注册或者全局解除)实战 #基本语法 # 仿真数据 # 如果没有attach就直 ...

  8. 通俗讲解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() 计算图 ...

  9. Jquery empty() remove() detach() 方法的区别

    方法简介: empty() This method removes not only child (and other descendant) elements, but also any text ...

  10. Detach Volume 操作 - 每天5分钟玩转 OpenStack(55)

    上一节我们成功地通过 attach 操作为 instance 添加了 volume,而与之相对的操作是 detach,就是将 volume 从 instance 上卸载下来. 下图是 Detach 操 ...

最新文章

  1. linux 内核 struct file_operations中 ioctl 变为 unlocked_ioctl
  2. 20172307 结对编程项目-四则运算 第二周 阶段总结
  3. 大型网站架构演化历程
  4. 如何对C4C UI上的手机号码字段加上自定义验证逻辑
  5. Spring Boot笔记-controller接收json参数
  6. java基础-关键字-native
  7. VC利用GDI+显示透明的PNG图片
  8. 网络扫描 : nbtscan
  9. 如何把flv视频转成mp4?
  10. linux 移动硬盘 mac,Macbook pro使用原生EFI在移动硬盘安装Windows+Fedora双系统
  11. position: sticky 属性
  12. Spring的9处调用后置处理器
  13. notebook pip install 只有星号_什么人不能种生基?什么人适合于做?只有这篇文章最清楚了!...
  14. echarts 仿支付宝基金七日年化折线图
  15. 六、Hystrix详解三:Hystrix的健康监测
  16. 官宣, CSDN 2018博客之星获奖名单!
  17. 十四、 ThinkPHP6_聚合.原生.子查询
  18. java pdf电子签名_如何使用Java(ItExtAPI)将PDFS合并而不丢失数字签名
  19. 我的2013,梦在路上
  20. java doxygen_Doxygen 使用总结

热门文章

  1. microsoft offic公式快捷键
  2. CleanMyMacX怎样清理Mac电脑的垃圾
  3. Nginx reload和restart区别
  4. 色值的透明度与十六进制代码转换
  5. Oracle EBS 汇率类型解释
  6. 污水中的重金属去除工艺,吸附重金属树脂CH-90Na
  7. 手摸手系列之SpringBoot+Vue整合snakeflow工作流实战
  8. 高校数据可视化(智慧校园)
  9. MTP in Android
  10. linux .bin安装包制作