当前位置:   article > 正文

Pytorch 之autograd_from torch.autograd import variable

from torch.autograd import variable

第1关:Variable

本关任务:

本关提供了一个张量变量tensor ,根据所给的张量创建 Variable 变量v,同时要求同学们掌握 Variable 的相关属性,例如如何获得 Variable 的 data 属性。

import torch
from torch.autograd import Variable
tensor = torch.FloatTensor([[1,4,2],[3,1,4]])

#/********** Begin *********/
v = Variable(tensor,requires_grad=True)
#/********** End *********/
print(v)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

第2关:Variable 属性

本关要求掌握Variable 的基本属性及其意义,如requires_grad属性标记着该Variable 是否需要求导。

本关任务:

本关提供了一个32位浮点型的张量 x,要求同学们根据 x创建一个Variable类型的变量 y, y是由 x 的平方计算得到,并输出y的Requires Gradiet属性和Gradient属性。

import torch
from torch.autograd import Variable

x = torch.FloatTensor([1,2,3])
x = Variable(x, requires_grad=True)

#/********** Begin *********/
#创建一个变量 y,由 x 的平方计算得到
y = x * x
#按照要求输出y相应的属性
print(y[0:3])
print('Requires Gradient : %s ' % (y.requires_grad))
print('Gradient : %s ' % (y.grad))
#/********** End *********/

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

第3关:梯度初探

结合上一关卡所介绍的Variable属性,我们将进一步学习Variable的反向传播函数backward,从而计算出其梯度的大小。

本关任务:

本关提供了一个 Variable 类型的变量x,并将x的 requires_grad设置为True,以便后续的求导操作。在 x 基础上进行相应的运算得到y ,在 y的基础上进行运算得到z,令变量out为 z 的平均值,计算out 的梯度并输出x的梯度值。求导计算的步骤如下所示:
在这里插入图片描述

import torch
from torch.autograd import Variable 

x = Variable(torch.Tensor(range(4)), requires_grad=True)
#/********** Begin *********/
#在 x 基础上进行运算, y = x + 2
y = x + 2
#y.backward(retain_graph=True)
#在 y 基础上进行运算, z = y * y * 3
z = y * y * 3
#令变量 out 为 z 的平均值并输出
#z.backward(retain_graph=True)
out=torch.sum(z)/len(z)
#计算 out 的梯度并输出x的梯度值
out.backward(retain_graph=True)
print("output:\n",out.view(1))
print(x.grad)
#/********** End *********/

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

第4关:梯度进阶

本关任务:

本关提供了Variable 类型的变量x和Variable 类型的变量y,并将x 和y的requires_grad设置为True以便后续的求导操作。在 x和y的基础上进行运算得到z,利用torch.autograd.grad方法求梯度 dz_dx和dz_dy。

import torch
from torch.autograd import Variable


x = Variable(torch.unsqueeze(torch.linspace(1, 6, 6), dim = 1).view(2, 3), requires_grad=True)

y = Variable(torch.Tensor(2, 3).uniform_(-1, 1), requires_grad=True)

#/********** Begin *********/
#计算 z = x*x + 3*y
z = x*x + 3*y

#求dz_dx和dz_dy 并输出
dz_dx = torch.autograd.grad(z,x,grad_outputs=torch.ones(1,3))
dz_dy = torch.autograd.grad(z,y,grad_outputs=torch.ones(2,3))
print("dz_dx: \n",dz_dx)
print("dz_dy: \n",dz_dy)
#/********** End *********/
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/577707
推荐阅读
相关标签
  

闽ICP备14008679号