PyTorch leaf node-程序员宅基地

技术标签: leaf node  PyTorch  人工智能  

起因

今天被PyTroch tensor的requires_grad搞了一把。具体情况是创建一个tensor和在后续的使用过程中,对requires_grad的取值会影响到python存储的变量是否为leaf node。说起来很抽象,直接上代码。

(有关leaf node,请参考我的另外一篇博客,https://blog.csdn.net/huyaoyu/article/details/81059315

测试代码

以下代码测试在PyTorch 1.3.1上。

import torch

if __name__ == "__main__":
    a = torch.tensor([1.0], requires_grad=False)
    print("a.is_leaf = {}. ".format( a.is_leaf ))

    b = torch.tensor([1.0], requires_grad=True)
    print("b.is_leaf = {}. ".format( b.is_leaf ))

    c = torch.tensor([1.0], requires_grad=False).clone()
    print("c.is_leaf = {}. ".format( c.is_leaf ))

    d = torch.tensor([1.0], requires_grad=False).detach()
    print("d.is_leaf = {}. ".format( d.is_leaf ))

    e = torch.tensor([1.0], requires_grad=False).cuda()
    print("e.is_leaf = {}. ".format( e.is_leaf ))

    f = torch.tensor([1.0], requires_grad=True).clone()
    print("f.is_leaf = {}. ".format( f.is_leaf ))

    g = torch.tensor([1.0], requires_grad=True).detach()
    print("g.is_leaf = {}. ".format( g.is_leaf ))

    h = torch.tensor([1.0], requires_grad=True).cuda()
    print("h.is_leaf = {}. ".format( h.is_leaf ))

    i = torch.tensor([1.0], requires_grad=True).clone().detach()
    print("i.is_leaf = {}. ".format( i.is_leaf ))

    j = torch.tensor([1.0], requires_grad=True).detach().clone()
    print("j.is_leaf = {}. ".format( j.is_leaf ))

    k = torch.tensor([1.0], requires_grad=True).cuda().detach()
    print("k.is_leaf = {}. ".format( k.is_leaf ))

各位猜一下输出都是什么?

输出是这样的(PyTorch 1.3.1):

a.is_leaf = True. 
b.is_leaf = True. 
c.is_leaf = True. 
d.is_leaf = True. 
e.is_leaf = True. 
f.is_leaf = False. 
g.is_leaf = True. 
h.is_leaf = False. 
i.is_leaf = True. 
j.is_leaf = True. 
k.is_leaf = True. 

其中fh的输出显示对应的python变量不再是leaf node了。其原因在于torch.tensor([1.0], requires_grad=True)将返回一个设置了requires_grad = True的tensor,这个tensor的所有后续的.clone().cuda()操作都是“可微”的,也就是说.clone().cuda()操作都将返回一个非leaf node。于是如果我们想确保得到的python变量是一个leaf node,最保险的做法是在使用类似于torch的tensor()zeros()函数时,不指定requires_grad,此时可以对得到的tensor随意操作.clone().cuda()并赋值给其他python变量。在得到最终python变量后,通过显式对requires_grad成员变量赋值从而设自动梯度运算请求。

参考文献

https://discuss.pytorch.org/t/how-to-define-a-leaf-tensor-in-pytorch-0-4-1/28461/5

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/huyaoyu/article/details/103270922

智能推荐

Linux命令之usermod命令_恒悦sunsite的博客-程序员宅基地

usermod命令修改系统帐户及账户相关的各项属性。如果用户的数字用户ID、用户名或用户的主目录发生更改,则必须确保在执行此命令时,命名用户未执行任何进程。usermod在Linux上对此进行检查,但仅检查用户是否根据其他架构上的utmp登录。您必须手动更改任何crontab文件或at作业的所有者。必须在NIS服务器上进行涉及NIS的任何更改。usermod命令的操作修改的是/etc/passwd和/etc/shadow这两个文件中的内容。........._usermod

概率论(一)——最大似然估计-程序员宅基地

通俗易懂:https://www.zhihu.com/question/24124998

随想录(学习nxp rt1052 soc)_nxp flm-程序员宅基地

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 在国内市场上,stm32是谜一样的存在。工控领域,除了51单片机,大概就是stm32的应用最广。其实不管是在消费类玩具电子,还是工业生产、物联网,stm32都有它的一席之地。近年来,随着m7的发布,现在stm32的最高频率甚至可以达到600M,这个频率基本上可以运行uclinux..._nxp flm

【我要我的音乐】让我们红尘作伴活得潇潇洒洒 轰轰烈烈把握青春年华-程序员宅基地

今天太阳显然是给力过了头,让人留恋起昨日深圳湾刚刚好的火烧云。这两天,“直把深圳当郑州”的节奏。有一句话我清晰地记得:你坐在单车后面,对我们经过的风景说三道四,直到一句话的时候,我才恍如隔世,意犹未尽地错把后面的人嫁接为你。有一件事我还是窝在心里三分钟:我依旧对什么生气,进而我知道我应该为什么而高兴。我不再埋怨我以为的你做错的事情——是因为我知道到最后事情终将不重要,而人甚至陪伴才

ORA-01652(临时表空间无法扩展)解决方法-程序员宅基地

错误信息:ORA-01652: unable to extend temp segment by 128 in tablespace EAS_T_STANDARD转自:http://www.oraclefans.cn/forum/showblog.jsp?rootid=4625解决ora-01652无法通过128(在temp表空间中)扩展temp段的过程...

undefined reference to `vtable for class::method'--链接共享库时出现-程序员宅基地

最近用Qt写一个项目时出现了undefined reference to 'vtable for class::methode'的错误!一 描述 程序结构如下: 共享库: libyqmath.so 有个类CMyDraw --完成一些绘画操作 1. 编译成功,存放在../../..

随便推点

centos 配置DNS服务器(bind)_bind centeros-程序员宅基地

DNS,全称Domain Name System,即域名解析系统。 DNS帮助用户在互联网上寻找路径。在互联网上的每一个计算机都拥有一个唯一的地址,称作“IP地址”(即互联网协议地址)。由于IP地址(为一串数字)不方便记忆,DNS允许用户使用一串常见的字母(即“域名”)取代。比如,您只需键入www.baidu.com,而不是“119.75.217.109”。即可访问ICANN的官方..._bind centeros

伺服系统和伺服电机-程序员宅基地

伺服电机(servo motor )是指在伺服系统中控制机械元件运转的发动机,是一种补助马达间接变速装置。伺服电机可使控制速度,位置精度非常准确,可以将电压信号转化为转矩和转速以驱动控制对象。伺服电机转子转速受输入信号控制,并能快速反应,在自动控制系统中,用作执行元件,且具有机电时间常数小、线性度高、始动电压等特性,可把所收到的电信号转换成电动机轴上的角位移或角速度输出。分为直流和交流伺服电动机两...

另辟蹊径:抛开微信模板消息,如何实现消息推送_不开通微信模板能推送消息吗-程序员宅基地

Q1:您当前是如何实现您的消息推送的?Q2:您使用模板消息推送是否会遇到: 1. 需要推送的对象涉及多个场景,需要被提醒多次? 2. 需要推送的时间点超出操作后7天时间范围?Q3: 收集了足够的formId,最终频繁的推送导致客户无法接收到有效信息?当然模板消息的推送方式和限制是有问题的么? 不 没有问题!但是依旧会有一些特殊场景需要突破模板消息的限制。被..._不开通微信模板能推送消息吗

怎么把CAJ文件转换成PDF-程序员宅基地

CAJ文件是知网资源平台内的专属文件,一般下载下来的文件全是默认的.CAJ的文件格式,这也就导致了其不能在别的阅读器内阅读,如今喜欢用PDF文件格式看书的人又特别多,那两者是如何进行转换的呢,请看下方操作。第一步:点开百度搜索界面,搜索关键词迅捷PDF在线转换器。找到相关主页。第二步:点开转换器首页后,点击文档转换,找到CAJ转PDF。第三步:打开CAJ转PDF页面后,点击选择文件添加CAJ文件。..._怎么把caj转换成pdf

HTTP 的GET请求和POST请求_post请求行-程序员宅基地

一、HTTP的请求根据 HTTP 标准,HTTP 请求可以使用多种请求方法。 HTTP1.0 定义了三种请求方法: GET, POST 和 HEAD方法。 HTTP1.1 新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法。1、请求行即求情的数据格式中的第一行,由三个内容组成:请求方式、URL、HTTP协议的版本。说明:1.请求方式:GET or POST2.URL:请求的目标网址,或者IP地址3.HTTP协议版本:发送请求的HTTP协议_post请求行

图片阴影效果怎么设置html,css如何给图片加阴影?-程序员宅基地

css可以实现很多的图片效果,图片阴影效果就是其中之一,那么css如何给图片添加阴影效果?本篇文章就给大家介绍如何使用css给图片添加阴影,希望对你们有所助。方法1:设置box-shadow属性通过一个简单的代码示例来看看box-shadow属性的实现方法。css 图片阴影--box-shadow属性.demo{width: 400px;height: 300px;margin: 50px aut..._css怎么给图片加灰色阴影

推荐文章

热门文章

相关标签