【PyTorch学习】PyTorch基础知识
2020-06-28 07:49:00 来源:易采站长站 作者:易采站长站整理
如果你的电脑支持GPU加速,还可以将Tensor放到GPU上。首先通过torch.cuda.is_available()判断一下是否支持GPU,如果想把tensor a放到GPU上,只需a.cuda()就能够将tensor a放到GPU上了。
if torch.cuda.is_available():
a_cuda = a.cuda()
print(a_cuda)
tensor([[ 2., 100.],
[ 4., 8.],
[ 7., 9.]], device='cuda:0')2.2 Variable(变量)
这个在numpy里面就没有了,是神经网络计算图里特有的一个概念,就是Variable提供了自动求导的功能。
Variable和Tensor本质上没有区别,不过Variable会被放入一个计算图中,然后进行前向传播,反向传播,自动求导。首先Variable是在torch.autograd.Variable中,要将一个tensor变成Variable也非常简单,比如想让一个tensor a变成Variable,只需要 Variable(a)就可以了。
Variable有三个比较重要的组成属性:
data:通过data可以取出Variable里面的tensor数值。
grad_fn:grad_fn表示的是得到这个Variable的操作,比如通过加减还是乘除来得到的。
grad:grad是这个Variabel的反向传播梯度。
下面通过例子来具体说明一下:
from torch.autograd import Variable # torch中Variable模块# 创建变量
x = Variable(torch.Tensor([1]), requires_grad=True)
w = Variable(torch.Tensor([2]), requires_grad=True)
b = Variable(torch.Tensor([3]), requires_grad=True)
# 建立一个计算图
y = w * x + b
# 计算梯度
y.backward()
print(x.grad)
print(w.grad)
print(b.grad)
tensor([2.])
tensor([1.])
tensor([1.])
构建Variable,要注意得传入一个参数requires_grad=True,这个参数表示是否对这个变量求梯度,默认的是False,也就是不对这个变量求梯度,这里我们希望得到这些变量的梯度,所以需要传入这个参数。
从上面的代码中,我们注意到了一行y.backward(),这一行代码就是所谓的自动求导,这其实等价y.backward(torch.FloatTensor([1])),只不过对于标量求导里面的参数就可以不写了,自动求导不需要你再去明确地写明哪个函数对哪个函数求导,直接通过这行代码就能对所有的需要梯度的变量进行求导,得到它们的梯度,然后通过x.grad可以得到x的梯度。
上面是标量的求导,同时也可以做矩阵求导,比如:













闽公网安备 35020302000061号