pytorch基础
1、Tensor
最基本的操作对象,tensor:
tensor就是张量的英文,表示多维的矩阵,比如一维就是向量,二维就是一般的矩阵等等,pytorch里面处理的单位就是一个一个的tensor
可以显示的得到其大小
这个和numpy很相似,同时tensor和numpy.array之间也可以相互转换
运算和numpy也类似
x = torch.rand(5, 4)
y = torch.rand(5, 4)
c = 3
加:
乘:
将 torch.Tensor 放到 GPU 上
Variable
pytorch和numpy不一样的地方就来了,就是其提供了自动求导功能,也就是可以自动给你你要的参数的梯度,这个操作由另外一个基本元素提供Variable
torch 和大部分框架一样有着自动求导功能,对象不再是 torch.Tensor,而是torch.autograd.Variable
本质上Variable和Tensor没有区别,不过Variabel会放入一个计算图,然后进行前向传播,反向传播以及自动求导
一个Variable里面包含着三个属性,data,grad和creator,其中creator表示得到这个Variabel的操作,比如乘法或者加法等等,grad表示方向传播的梯度,data表示取出这个Variabel里面的数据。
from torch.autograd import Variable
# requires_grad 表示是否对其求梯度,默认是False
x = Variable(torch.Tensor([3]), requires_grad=True)
y = Variable(torch.Tensor([5]), requires_grad=True)
z = 2 * x + y + 4
# 对 x 和 y 分别求导
z.backward()
# x 的导数和 y 的导数
print('dz/dx: {}'.format(x.grad.data))
print('dz/dy: {}'.format(y.grad.data))
神经网络部分
所依赖的主要是 torch.nn 和 torch.nn.functional
torch.nn 里面有着所有的神经网络的层的操作,其用来构建网络,只有执行一次网络的运算才执行一次
torch.nn.functional 表示的是直接对其做一次向前运算操作。
from torch import nn
import torch.nn.functional as F
# 基本的网络构建类模板
class net_name(nn.Module):
def __init__(self):
super(net_name, self).__init__()
# 可以添加各种网络层
self.conv1 = nn.Conv2d(3, 10, 3)
# 具体每种层的参数可以去查看文档
def forward(self, x):
# 定义向前传播
out = self.conv1(x)
return out
这就是构建所有神经网络的模板,不管你想构建卷积神经网络还是循环神经网络或者是生成对抗网络都依赖于这个结构。
以上内容学习于:https://github.com/L1aoXingyu/pytorch-beginner/blob/master/00-Pytorch%20Basics/basic.ipynb