what is variable?

variable:pytorch中的变量,存储tensor,数值会不断变动

在 Torch 中的 Variable 就是一个存放会变化的值的地理位置. 里面的值会不停的变化. 就像一个裝鸡蛋的篮子, 鸡蛋数会不停变动. 那谁是里面的鸡蛋呢, 自然就是 Torch 的 Tensor 咯. 如果用一个 Variable 进行计算, 那返回的也是一个同类型的 Variable.

定义一个variable: 重要属性,requires_grad:要不要自动微分

import torch
from torch.autograd import Variable # torch 中 Variable 模块 # 先生鸡蛋
tensor = torch.FloatTensor([[1,2],[3,4]])
# 把鸡蛋放到篮子里, requires_grad是参不参与误差反向传播, 要不要计算梯度
variable = Variable(tensor, requires_grad=True) print(tensor)
"""
1 2
3 4
[torch.FloatTensor of size 2x2]
""" print(variable)
"""
Variable containing:
1 2
3 4
[torch.FloatTensor of size 2x2]
"""
12345678910111213141516171819202122

Variable 计算, 梯度

variable 的最重要作用就是计算微分,即梯度

我们再对比一下 tensor 的计算和 variable 的计算.

t_out = torch.mean(tensor*tensor)       # x^2
v_out = torch.mean(variable*variable) # x^2
print(t_out)
print(v_out) # 7.5
1234

到目前为止, 我们看不出什么不同, 但是时刻记住, Variable 计算时, 它在背景幕布后面一步步默默地搭建着一个庞大的系统, 叫做计算图, computational graph. 这个图是用来干嘛的? 原来是将所有的计算步骤 (节点) 都连接起来, 最后进行误差反向传递的时候, 一次性将所有 variable 里面的修改幅度 (梯度) 都计算出来, 而 tensor 就没有这个能力啦.

v_out = torch.mean(variable*variable)就是在计算图中添加的一个计算步骤, 计算误差反向传递的时候有他一份功劳, 我们就来举个例子:

v_out.backward()    # 模拟 v_out 的误差反向传递

# 下面两步看不懂没关系, 只要知道 Variable 是计算图的一部分, 可以用来传递误差就好.
# v_out = 1/4 * sum(variable*variable) 这是计算图中的 v_out 计算步骤
# 针对于 v_out 的梯度就是, d(v_out)/d(variable) = 1/4*2*variable = variable/2 print(variable.grad) # 初始 Variable 的梯度
'''
0.5000 1.0000
1.5000 2.0000
'''
1234567891011

获取 Variable 里面的数据

直接print(variable)只会输出 Variable 形式的数据, 在很多时候是用不了的(比如想要用 plt 画图), 所以我们要转换一下, 将它变成 tensor 形式.

print(variable)     #  Variable 形式
"""
Variable containing:
1 2
3 4
[torch.FloatTensor of size 2x2]
""" print(variable.data) # tensor 形式
"""
1 2
3 4
[torch.FloatTensor of size 2x2]
""" print(variable.data.numpy()) # numpy 形式
"""
[[ 1. 2.]
[ 3. 4.]]
"""

Recommended approach for saving a model

The first (recommended) saves and loads only the model parameters:

torch.save(the_model.state_dict(), PATH)

Then later:

the_model = TheModelClass(*args, **kwargs)
the_model.load_state_dict(torch.load(PATH))

最新文章

  1. MapReduce实现二度好友关系
  2. 标准 DateTime 格式字符串
  3. 浅谈TCP优化
  4. C#中的lock关键字(初识)
  5. 【Linux】基础配置-修改命令提示符的风格
  6. RollPagerView的用法:
  7. hdu1869六度分离(dijkstra)
  8. 服务 进程间通讯 IPC AIDL Parcelable 简介
  9. boost 分析命令行参数
  10. HDU 2489 Minimal Ratio Tree 最小生成树+DFS
  11. FIFO存储器
  12. JFinal 学习笔记之Handler包分析
  13. C# BackgroundWorker使用总结
  14. ORM对象关系映射
  15. AJPFX:外汇的价格图表类型和技术指标类型
  16. java中return、break、continue的区别
  17. GitHub 新手教程 二,Windows 版 GitHub 安装
  18. Android 启动项 Activity
  19. Android 开发中Service完全解析
  20. 以jhtml结尾的文件

热门文章

  1. Groovy元编程简明教程
  2. python学习(day1-2)
  3. allure定制化输出测试报告,让报告锦上添花!
  4. Fusionstorage的逻辑架构
  5. 关于matlab2014a中生成dll文件,打包成com组件出现的问题和解决方法
  6. Python Turtle绘画初学编程——六芒星,浪形圈
  7. Asp.Net Mvc自定义控件之树形结构数据生成表格 - WPF特工队内部资料
  8. JAVA 设置模块间的依赖关系
  9. Windows Store可以下载安装Windows Terminal (Preview)
  10. JS引擎和作用域、编译器之间对话