pytorch中的Variable()

函数简介

torch.autograd.Variable是Autograd的核心类,它封装了Tensor,并整合了反向传播的相关实现(tensor变成variable之后才能进行反向传播求梯度?用变量.backward()进行反向传播之后,var.grad中保存了var的梯度)

x = Variable(tensor, requires_grad = True)
 
 

Varibale包含三个属性:

  • data:存储了Tensor,是本体的数据
  • grad:保存了data的梯度,本事是个Variable而非Tensor,与data形状一致
  • grad_fn:指向Function对象,用于反向传播的梯度计算之用

用法:


 
 
  1. import torch
  2. from torch.autograd import Variable
  3. x = Variable(torch.one( 2, 2), requires_grad = True)
  4. print(x) #其实查询的是x.data,是个tensor

举个例子求梯度:

构建一个简单的方程:y = x[0,0] + x[0,1] + x[1,0] + x[1,1],Variable的运算结果也是Variable,但是,中间结果反向传播中不会被求导()

这和TensorFlow不太一致,TensorFlow中中间运算果数据结构均是Tensor


 
 
  1. y = x.sum()
  2. y
  3. """
  4.   Variable containing:
  5.    4
  6.   [torch.FloatTensor of size 1]
  7. """
  8. #可以查看目标函数的.grad_fn方法,它用来求梯度
  9. y.grad_fn
  10. """
  11.     <SumBackward0 at 0x18bcbfcdd30>
  12. """
  13. y.backward() # 反向传播
  14. x.grad # Variable的梯度保存在Variable.grad中
  15. """
  16.   Variable containing:
  17.    1 1
  18.    1 1
  19.   [torch.FloatTensor of size 2x2]
  20. """
  21. #grad属性保存在Variable中,新的梯度下来会进行累加,可以看到再次求导后结果变成了2,
  22. y.backward()
  23. x.grad # 可以看到变量梯度是累加的
  24. """
  25. Variable containing:
  26. 2 2
  27. 2 2
  28. [torch.FloatTensor of size 2x2]
  29. """
  30. #所以要归零
  31. x.grad.data.zero_() # 归零梯度,注意,在torch中所有的inplace操作都是要带下划线的,虽然就没有.data.zero()方法
  32. """
  33. 0 0
  34. 0 0
  35. [torch.FloatTensor of size 2x2]
  36. """
  37. #对比Variable和Tensor的接口,相差无两
  38. x = Variable(torch.ones( 4, 5))
  39. y = torch.cos(x) # 传入Variable
  40. x_tensor_cos = torch.cos(x.data) # 传入Tensor
  41. print(y)
  42. print(x_tensor_cos)
  43. """
  44. Variable containing:
  45. 0.5403 0.5403 0.5403 0.5403 0.5403
  46. 0.5403 0.5403 0.5403 0.5403 0.5403
  47. 0.5403 0.5403 0.5403 0.5403 0.5403
  48. 0.5403 0.5403 0.5403 0.5403 0.5403
  49. [torch.FloatTensor of size 4x5]
  50. 0.5403 0.5403 0.5403 0.5403 0.5403
  51. 0.5403 0.5403 0.5403 0.5403 0.5403
  52. 0.5403 0.5403 0.5403 0.5403 0.5403
  53. 0.5403 0.5403 0.5403 0.5403 0.5403
  54. [torch.FloatTensor of size 4x5]
  55. """

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值