一.detach()
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()相关推荐
- detach detach_ pytorch
pytorch中的detach和detach_ pytorch 的 Variable 对象中有两个方法,detach和 detach_ : detach 官方文档中,对这个方法是这么介绍的. 返回一个 ...
- pytorch: Variable detach 与 detach_
pytorch 的 Variable 对象中有两个方法,detach和 detach_ 本文主要介绍这两个方法的效果和 能用这两个方法干什么. detach 官方文档中,对这个方法是这么介绍的. 返回 ...
- C++:多线程中的小白(2)线程启动、结束、创建线程、join、detach
目录 一.范例演示:线程运行的开始和结束 二.其他创建线程的手法 一.范例演示:线程运行的开始和结束 (1)thrad (2)join()函数 (3)detach()函数 (4)joinable()函 ...
- java detach_线程 (detach的作用)
线程状态 在一个线程的生存期内,可以在多种状态之间转换.不同操作系统可以实现不同的线程模型,定义许多不同的线程状态,每个状 态还可以包含多个子状态.但大体说来,如下几种状态是通用的: 就绪:参与调度, ...
- 第三节 线程传参详解、detach()大坑、成员函数做线程函数
1.传递临时对象作为线程参数 原始的输入程序如下: #include <iostream> #include <thread>using namespace std;void ...
- 第二节 线程启动、结束、创建线程多个方法、join()、detach()
1.范例演示线程运行的开始和结束 可执行程序运行起来,生成一个进程,该进程所属的主线程开始自动运行. #include <iostream> #include <vector> ...
- R语言attach函数、detach函数(全局注册或者全局解除)实战
R语言attach函数.detach函数(全局注册或者全局解除)实战 目录 R语言attach函数.detach函数(全局注册或者全局解除)实战 #基本语法 # 仿真数据 # 如果没有attach就直 ...
- 通俗讲解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() 计算图 ...
- Jquery empty() remove() detach() 方法的区别
方法简介: empty() This method removes not only child (and other descendant) elements, but also any text ...
- Detach Volume 操作 - 每天5分钟玩转 OpenStack(55)
上一节我们成功地通过 attach 操作为 instance 添加了 volume,而与之相对的操作是 detach,就是将 volume 从 instance 上卸载下来. 下图是 Detach 操 ...
最新文章
- linux 内核 struct file_operations中 ioctl 变为 unlocked_ioctl
- 20172307 结对编程项目-四则运算 第二周 阶段总结
- 大型网站架构演化历程
- 如何对C4C UI上的手机号码字段加上自定义验证逻辑
- Spring Boot笔记-controller接收json参数
- java基础-关键字-native
- VC利用GDI+显示透明的PNG图片
- 网络扫描 : nbtscan
- 如何把flv视频转成mp4?
- linux 移动硬盘 mac,Macbook pro使用原生EFI在移动硬盘安装Windows+Fedora双系统
- position: sticky 属性
- Spring的9处调用后置处理器
- notebook pip install 只有星号_什么人不能种生基?什么人适合于做?只有这篇文章最清楚了!...
- echarts 仿支付宝基金七日年化折线图
- 六、Hystrix详解三:Hystrix的健康监测
- 官宣, CSDN 2018博客之星获奖名单!
- 十四、 ThinkPHP6_聚合.原生.子查询
- java pdf电子签名_如何使用Java(ItExtAPI)将PDFS合并而不丢失数字签名
- 我的2013,梦在路上
- java doxygen_Doxygen 使用总结