pytorch中的Variable()
参考链接:https://www.cnblogs.com/hellcat/p/8439055.html
函数简介
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对象,用于反向传播的梯度计算之用
用法:
import torch
from torch.autograd import Variablex = Variable(torch.one(2,2), requires_grad = True)
print(x)#其实查询的是x.data,是个tensor
举个例子求梯度:
构建一个简单的方程:y = x[0,0] + x[0,1] + x[1,0] + x[1,1],Variable的运算结果也是Variable,但是,中间结果反向传播中不会被求导()
这和TensorFlow不太一致,TensorFlow中中间运算果数据结构均是Tensor
y = x.sum()y
"""Variable containing:4[torch.FloatTensor of size 1]
"""#可以查看目标函数的.grad_fn方法,它用来求梯度
y.grad_fn
"""<SumBackward0 at 0x18bcbfcdd30>
"""y.backward() # 反向传播
x.grad # Variable的梯度保存在Variable.grad中
"""Variable containing:1 11 1[torch.FloatTensor of size 2x2]
"""#grad属性保存在Variable中,新的梯度下来会进行累加,可以看到再次求导后结果变成了2,
y.backward()
x.grad # 可以看到变量梯度是累加的
"""Variable containing:2 22 2[torch.FloatTensor of size 2x2]
"""#所以要归零
x.grad.data.zero_() # 归零梯度,注意,在torch中所有的inplace操作都是要带下划线的,虽然就没有.data.zero()方法"""0 00 0
[torch.FloatTensor of size 2x2]
"""#对比Variable和Tensor的接口,相差无两
x = Variable(torch.ones(4, 5))y = torch.cos(x) # 传入Variable
x_tensor_cos = torch.cos(x.data) # 传入Tensorprint(y)
print(x_tensor_cos)"""
Variable containing:0.5403 0.5403 0.5403 0.5403 0.54030.5403 0.5403 0.5403 0.5403 0.54030.5403 0.5403 0.5403 0.5403 0.54030.5403 0.5403 0.5403 0.5403 0.5403
[torch.FloatTensor of size 4x5]0.5403 0.5403 0.5403 0.5403 0.54030.5403 0.5403 0.5403 0.5403 0.54030.5403 0.5403 0.5403 0.5403 0.54030.5403 0.5403 0.5403 0.5403 0.5403
[torch.FloatTensor of size 4x5]
"""
pytorch中的Variable()相关推荐
- PyTorch中的Variable类型
1 前言 今天在学习PyTorch~ 之前在莫烦的教程中看到了Variable类型的变量,后来看PyTorch的<Deep Learning with PyTorch: A 60 Minute ...
- Pytorch中的Variable
Pytorch中的Variable pytorch两个基本对象:Tensor(张量)和Variable(变量) 其中,tensor不能反向传播,variable可以反向传播. Varibale包含三个 ...
- Pytorch中的variable, tensor与numpy相互转化
来源:https://blog.csdn.net/m0_37592397/article/details/88327248 1.将numpy矩阵转换为Tensor张量 sub_ts = torch.f ...
- Pytorch中的variable, tensor与numpy相互转化的方法
来源:https://blog.csdn.net/pengge0433/article/details/79459679 在使用pytorch作为深度学习的框架时,经常会遇到变量variable.张量 ...
- pytorch中的Variable还有必要使用吗?
pytorch1.6文档 Variable 早在在pytorch0.4已经不需要了 tensor就支持autograd了 所以见到 data=Variable(data) 这样的用法请大胆删除Va ...
- PyTorch中Variable变量与torch.autograd.Variable
一.了解Variable 顾名思义,Variable就是 变量 的意思.实质上也就是可以变化的量,区别于int变量,它是一种可以变化的变量,这正好就符合了反向传播,参数更新的属性. 具体来说,在pyt ...
- PyTorch中Variable变量
一.了解Variable 顾名思义,Variable就是 变量 的意思.实质上也就是可以变化的量,区别于int变量,它是一种可以变化的变量,这正好就符合了反向传播,参数更新的属性. 具体来说,在pyt ...
- python variable_PyTorch中的Variable变量详解
一.了解Variable 顾名思义,Variable就是 变量 的意思.实质上也就是可以变化的量,区别于int变量,它是一种可以变化的变量,这正好就符合了反向传播,参数更新的属性. 具体来说,在pyt ...
- 『PyTorch』第五弹_深入理解autograd_中:Variable梯度探究
查看非叶节点梯度的两种方法 在反向传播过程中非叶子节点的导数计算完之后即被清空.若想查看这些变量的梯度,有两种方法: 使用autograd.grad函数 使用hook autograd.grad和ho ...
最新文章
- 高速缓冲DNS相关配置详情
- Deformable ConvNets--Part2: Spatial Transfomer Networks(STN)
- windows 7 全屏游戏解决方案
- js中用到的正则表达式
- Codeforces 724C Ray Tracing 扩展欧几里得
- Qt5模型/视图结构-视图(View)
- 寄存器(cpu工作原理)
- 如何在Android主屏幕上添加热点快捷方式
- 求出2个字符串中的最大公共子串
- Hadoop 2.7.1 使用minicluster进行单元测试
- 项目管理第五章项目范围管理
- 怎么把html转成mp4,怎么把其他视频格式转成常用的mp4形式?
- Android微信通讯录界面代码,Android中使用Expandablelistview实现微信通讯录界面
- 把USB打印机映射到LPT端口
- 样本的方差的均值等于总体的方差
- 发票扫一扫,OCR识别功能
- Java: 数组、列表和集合的互相转换
- ET框架-16 ET框架登录账号请求逻辑编写(1)
- joost网络电视的速度优化技巧和邀请连接
- 可能是iOS上最好用的定时器,现在限时免费