首页 > 其他分享 >pytorch-is_leaf-叶子张量

pytorch-is_leaf-叶子张量

时间:2022-09-06 09:23:16浏览次数:77  
标签:10 leaf requires torch 张量 pytorch True grad

1 概念介绍

        在pytorch的tensor类中,有个is_leaf的属性,表示这个tensor是否是叶子节点:is_leaf 为False的时候,则不是叶子节点, is_leaf为True的时候为叶子节点(有的地方也叫做叶子张量)

1.1 为什么要叶子节点

        对于tensor中的 requires_grad()属性,当requires_grad()为True时我们将会记录tensor的运算过程并为自动求导做准备。

        但是并不是每个requires_grad()设为True的值都会在backward的时候得到相应的grad。它还必须为leaf。

        这就说明. leaf成为了在 requires_grad()下判断是否需要保留 grad的前提条件

1.2  那么张量是叶子张量?

1.所有requires_grad为False的张量(Tensor) 都为叶张量( leaf Tensor)

 

x_=torch.arange(10,dtype=torch.float32).reshape(10,1)

x_.is_leaf

#True

2.requires_grad为True的张量(Tensor),如果他们是由用户创建的,则它们是叶张量(leaf Tensor).这意味着它们不是运算的结果,因此gra_fn为None

xx=torch.arange(10,dtype=torch.float32,requires_grad=True).reshape(10,1)

xx.is_leaf

#False

xx=torch.arange(10,dtype=torch.float32,requires_grad=True).reshape(10,1)

ww=torch.arange(10,dtype=torch.float32,requires_grad=True).reshape(1,10)

yy=ww@xx

yy.backward()

xx.grad,ww.grad

#(None, None)

'''

UserWarning: The .grad attribute of a Tensor that is not a leaf

Tensor is being accessed. Its .grad attribute won't be populated

during autograd.backward(). If you indeed want the gradient for

a non-leaf Tensor, use .retain_grad() on the non-leaf Tensor.

If you access the non-leaf Tensor by mistake, make sure you

access the leaf Tensor instead.

See github.com/pytorch/pytorch/pull/30531

for more informations.

'''

3.只有是叶张量的tensor在反向传播时才会将本身的grad传入的backward的运算中.。如果想得到当前自己创建的,requires_grad为True的tensor在反向传播时的grad, 可以用retain_grad()这个属性

 

xx=torch.arange(10,dtype=torch.float32,requires_grad=True).reshape(10,1)

ww=torch.arange(10,dtype=torch.float32,requires_grad=True).reshape(1,10)

yy=ww@xx

xx.retain_grad()

ww.retain_grad()

yy.backward()

xx.grad,ww.grad

'''

(tensor([[0.],

[1.],

[2.],

[3.],

[4.],

[5.],

[6.],

[7.],

[8.],

[9.]]),

tensor([[0., 1., 2., 3., 4., 5., 6., 7., 8., 9.]]))

'''

 

参考内容:【one way的pytorch学习笔记】(三)leaf 叶子(张量)_One Way的博客-CSDN博客 

标签:10,leaf,requires,torch,张量,pytorch,True,grad
From: https://www.cnblogs.com/chentiao/p/16660576.html

相关文章

  • pytorch相关知识点
    1.super的作用super()函数可以隐式的将子类里的method和父类里的method进行关联,这样就不需要再子类里显式的重新创建父类method里的属性说人话就是继承父类需要对用到的......
  • Spring Boot 2.x基础教程:使用 Thymeleaf开发Web页面
    通过本系列教程的前几章内容(API开发、数据访问)。我们已经具备完成一个涵盖数据存储、提供HTTP接口的完整后端服务了。依托这些技能,我们已经可以配合前端开发人员,一起来完成......
  • 【防忘笔记】一个例子理解Pytorch中一维卷积nn.Conv1d
    一维卷积层的各项参数如下torch.nn.Conv1d(in_channels,out_channels,kernel_size,stride=1,padding=0,dilation=1,groups=1,bias=True,padding_mode='zeros',de......
  • 【MindSpore易点通】如何将PyTorch源码转成MindSpore低阶APIP,并在Ascend芯片上实现单
    文章来源:华为云论坛_云计算论坛_开发者论坛_技术论坛-华为云1 概述本文将介绍如何将PyTorch源码转换成MindSpore低阶API代码,并在Ascend芯片上实现单机单卡训练。下图展......
  • Pytorch 数据增强
    在进行深度学习训练时,如果图片过大或者训练数据匮乏时可以对输入数据进行裁剪,翻转等操作。 Pytorch官网讲解: Transforms—PyTorchTutorials1.12.1+cu102document......
  • Pytorch——Dataset&Dataloader
    在利用Pytorch进行深度学习的训练时需要将数据进行打包,这就是Dataset与Dataloader的作用。 Dataset将数据进行包装,Dataloader迭代包装好的数据并输出每次训练所......
  • pytorch模型转mindspore模型的相似度
    test_image='images/hand.jpg'oriImg=cv2.imread(test_image) #B,G,Rorderw=body_estimation(oriImg)#直接存w0就行。np.save('input.npy',oriImg)np.save('o......
  • pytorch多卡训练DDP卡死问题排查
    背景单机多卡并行模型训练,使用DistributedDataParallel加速,调用超过一个GPU会发生卡死,表现为GPU0占用100%且无法继续。排查使用nvtop工具查看,发现GPU0会被分配nproc_per......
  • 9 PyTorch的模型部署
    9.1 ONNX(OpenNeuralNetworkExchange)简介ONNX(OpenNeuralNetworkExchange) 通过定义一组与环境和平台无关的标准格式,使AI模型可以在不同框架和环境下交互......
  • 8. PyTorch生态简介
    由于本人未接触过也并未打算从事图像相关工作,所以只介绍了torchtext生态。有关torchvision和PytorchViseo只是了解了一下并未进行笔记输出。torchtext简介torch......