[Pytorch系列-19]:Pytorch基础 - Variable变量的使用方法与 Tensor变量的比较
Posted 文火冰糖的硅基工坊
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Pytorch系列-19]:Pytorch基础 - Variable变量的使用方法与 Tensor变量的比较相关的知识,希望对你有一定的参考价值。
作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客
本文网址:https://blog.csdn.net/HiWangWenBing/article/details/120240309
目录
1.3 普通tensor与Variable在深度学习中各种的用途
2.2 Variable的定义:Variable就是Tensor
第1章 Variable变量
1.1 为什么需要引入Variable
Tensor是Pytorch的一个完美组件(可以生成高维数组),可以对张量进行各种并行运算。
但是要构建神经网络,进行自动求导和反向传播,光有Tensor还是远远不够的,需要引入一个具备自动求导新特新的数据结构Variable。
1.2 什么是Variable
Variable是对Tensor的一个封装,因此Tensor具备的操作,Variable都具备。
Variable还引入了三个额外的属性:
- data:Variable变量用于存放变量本身的数值
- grad:Variable变量用于存放变量针对某一个函数f的偏导数值.
- grad_fn:计算梯度的函数
Tensor对Variable类型的指示
- requires_grad=True
1.3 普通tensor与Variable在深度学习中各种的用途
(1)普通tensor:
- 存放输入的样本数据
- 存放输出的结果数据
- 中间边的临时数据
(2)Variable变量
- 专门存放神经网络模型的参数w,b
1.4 Variable与Tensor的整合
在最新的Pytorch中,Variable整合到了Tensor中。
Variable和Tensor具备了相同的数据结构,普通的tensor也具备如下的三个属性。
- data:Variable变量对应tensor的数据,必须是一个数值,不能是数值序列
- grad:Variable变量对应tensor的梯度,多元函数时,不同的变量又不同的偏导函数
- grad_fn:该变量对应的自动推导的导函数,多元函数时,不同的变量又不同的偏导函数
它们的差别是:
Variable默认设置requires_grad=True.
普通tensor默认设置requires_grad=flase
第2章 Variable的定义
2.1 Variable所在的module
Variable被定义在torch.autograd模块中。
#环境准备
import numpy as np
import torch
from torch.autograd import Variable
print("Hello World")
print(torch.__version__)
print(torch.cuda.is_available())
Hello World 1.8.0 False
2.2 Variable的定义:Variable就是Tensor
Variable可以由已有的tensor生成
(1)张量
# 生成张量
tensor_a = torch.Tensor([[1., 2.0, 3],[3.,4., 5]])
print(tensor_a)
print(tensor_a.shape)
tensor([[1., 2., 3.], [3., 4., 5.]]) torch.Size([2, 3])
(2)方法1
print("根据张量,生成variable")
var_a = torch.autograd.Variable(tensor_a, requires_grad=True)
print(var_a)
print(var_a.shape)
print("\\n根据张量,生成variable")
var_b = torch.autograd.Variable(tensor_a, requires_grad=False)
print(var_b)
print(var_b.shape)
根据张量,生成variable
tensor([[1., 2., 3.],
[3., 4., 5.]], requires_grad=True)
torch.Size([2, 3])
根据张量,生成variable
tensor([[1., 2., 3.],
[3., 4., 5.]])
torch.Size([2, 3])
备注:variable就是张量。
(3)方法2
print("根据张量,生成variable")
var_c = Variable(tensor_a, requires_grad=True)
print(var_c)
print(var_c.shape)
print("\\n根据张量,生成variable")
var_d = Variable(tensor_a, requires_grad=False)
print(var_d)
print(var_d.shape)
根据张量,生成variable
tensor([[1., 2., 3.],
[3., 4., 5.]], requires_grad=True)
torch.Size([2, 3])
根据张量,生成variable
tensor([[1., 2., 3.],
[3., 4., 5.]])
torch.Size([2, 3])
备注:
- variable就是张量
- variable是requires_grad=true的张量
2.3 tensor与variable的进一步比较
print(tensor_a.grad)
print(var_a.grad)
print(var_b.grad)
print(var_c.grad)
print(var_d.grad)
None None None None None
print(tensor_a.grad_fn)
print(var_a.grad_fn)
print(var_b.grad_fn)
print(var_c.grad_fn)
print(var_d.grad_fn)
None None None None None
print(tensor_a.data)
print(var_a.data)
print(var_b.data)
print(var_c.data)
print(var_d.data)
tensor([[1., 2., 3.], [3., 4., 5.]]) tensor([[1., 2., 3.], [3., 4., 5.]]) tensor([[1., 2., 3.], [3., 4., 5.]]) tensor([[1., 2., 3.], [3., 4., 5.]]) tensor([[1., 2., 3.], [3., 4., 5.]])
2.4 把variable转换以成numpy
x_variable = Variable(torch.Tensor([-3, -2,-1,0, 1, 2, 3]), requires_grad = True)
print(x_variable)
x_numpy = x_variable.data.numpy()
print(x_numpy)
tensor([-3., -2., -1., 0., 1., 2., 3.], requires_grad=True)
[-3. -2. -1. 0. 1. 2. 3.]
待续..........: variable的自动求导
作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客
本文网址:https://blog.csdn.net/HiWangWenBing/article/details/120240309
以上是关于[Pytorch系列-19]:Pytorch基础 - Variable变量的使用方法与 Tensor变量的比较的主要内容,如果未能解决你的问题,请参考以下文章
[Pytorch系列-18]:Pytorch基础 - 张量的范数
[Pytorch系列-20]:Pytorch基础 - Varialbe变量的手工求导和自动链式求导
[Pytorch系列-22]:Pytorch基础 - Autograd库 Autograd.Function与反向自动求导机制
[Pytorch系列-21]:Pytorch基础 - 反向链式求导的全过程拆解