鱼C论坛

 找回密码
 立即注册
查看: 3554|回复: 2

[学习笔记] pytorch中的Variable()

[复制链接]
发表于 2022-10-10 23:53:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 Handsome_zhou 于 2022-10-11 00:00 编辑
  1. #torch.autograd.Variable是Autograd的核心类,它封装了Tensor,并整合了反向传播的相关实现
  2. #Variable包含三个属性:
  3. #    data: 存储了Tensor, 是本体的数据
  4. #    grad: 保存了data的梯度,本事是个Variable而非Tensor, 与data形状一致
  5. #    grad_fn: 指向Function对象,用于反向传播的梯度计算只用
  6. import torch
  7. from torch.autograd import Variable

  8. x = Variable(torch.ones(2,2), requires_grad = True)

  9. y = x[0,0] + x[0,1] + x[1,0] + x[1,1] #Variable的运算结果也是Variable,但是中间结果反向传播中不会被求导。

  10. y = x.sum()

  11. y#其实查询的是x.data, 是个tensor。
  12. """
  13.     Variable containing:
  14.     4
  15.     [torch.FloatTensor of size 1]
  16. """


  17. y.grad_fn # 目标函数的.grad_fn方法,它用来求梯度

  18. """
  19.     <SumBackward0 at 0x18bcbfcdd30>
  20. """


  21. y.backward() # 反向传播
  22. x.grad  #Variable的梯度保存在Variable.grad中
  23. """
  24.     Variable containing:
  25.     1  1
  26.     1  1
  27.     [torch.FloatTensor of size 2x2]
  28. """


  29. #grad属性保存在Variable中, 新的梯度下来会进行累加,再次求导后结果变成了2
  30. y.backward()
  31. x.grad # 可以看到变量梯度是累加的
  32. """
  33.     Variable containing:
  34.     2  2
  35.     2  2
  36. """


  37. #所以梯度要归零     在模型训练时直接优化器梯度清零, optimizer.zero_grad()
  38. x.grad.data.zero_() # 归零梯度, 注意, 在torch中所有的Inplace操作都是要带下划线的,所以就没有.data.zero()方法

  39. """
  40.     0  0
  41.     0  0
  42.     [torch.FloatTensor of size 2x2]
  43. """



  44. #对比Variable和Tensor的接口,相差无两
  45. x = Variable(torch.ones(4, 5))

  46. y = torch.cos(x) # 传入Variable
  47. x_tensor_cos = torch.cos(x.data) # 传入Tensor

  48. print(y)
  49. print(x_tensor_cos)

  50. """
  51.     Variable containing:
  52.     0.5403, 0.5403, 0.5403, 0.5403, 0.5403
  53.     0.5403, 0.5403, 0.5403, 0.5403, 0.5403
  54.     0.5403, 0.5403, 0.5403, 0.5403, 0.5403
  55.     0.5403, 0.5403, 0.5403, 0.5403, 0.5403
  56.     [torch.FloatTensor of size 4x5]
  57.    
  58.     0.5403, 0.5403, 0.5403, 0.5403, 0.5403
  59.     0.5403, 0.5403, 0.5403, 0.5403, 0.5403
  60.     0.5403, 0.5403, 0.5403, 0.5403, 0.5403
  61.     0.5403, 0.5403, 0.5403, 0.5403, 0.5403
  62.     [torch.FloatTensor of size 4x5]
  63. """
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-10-11 08:22:11 | 显示全部楼层
什么时候出一种语言一统江湖就好了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-17 17:07:18 | 显示全部楼层
牛逼,大佬
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-22 03:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表