接下来我们将进入Pytorch快速入门系列教程,本系列主要参考深度炼丹
的知乎专栏,并且已经获得了作者的许可转载,同时文章会有较多改动,我将会以一个新手的视角带大家学习PyTorch,同时如果有不对的地方,欢迎大家到给我留言,大家也可以一觉分享交流!如果你还不知道pytorch是啥,可以去看一看以前的文章
环境配置
要学习pytorch,首先当然是需要安装pytorch了,目前pytorch只支持mac和linux,如果你的电脑是windows,装虚拟机或者双系统。如果想要愉快地学习,那么强烈推荐使用linux系统,因为所有的深度学习框架在linux上都有很好的支持,远远好于windows系统,而且linux也没有大家想象中的那么难学,目前linux系统的图形界面让大家上手的时候更加容易。
Linux或者Mac默认安装了python2.7系统,大家安装玩Linux系统以后接下来就是安装Pytorch了,其实安装很简单,大家可以参考:
pytorch基础
装好了pytorch之后,正式进入我们的教程,pytorch基础部分,这个部分主要是介绍一下pytorch处理的对象以及操作。
Tensor
tensor就是张量的英文,表示多维的矩阵,比如一维就是向量,二维就是一般的矩阵等等,pytorch里面处理的单位就是一个一个的tensor
# -*- coding: utf-8 -*-import torcha = torch.Tensor(3,3)print a
可以输出
1.00000e-42 * 0.0000 0.0000 0.0000 0.0000 4.8107 0.0000 0.0000 0.0000 4.8093[torch.FloatTensor of size 3x3]
size
可以显示的得到其大小,如下代码会输出(3L, 3L)
# -*- coding: utf-8 -*-import torcha = torch.Tensor(3,3)print a.size()
这个和numpy
很相似,同时tensor
和numpy.array
之间也可以相互转换
# -*- coding: utf-8 -*-import torcha = torch.Tensor(3,3)print a.size()
tensor
的运算也很简单,一般的四则运算都是支持的
Variable
pytorch和numpy不一样的地方就来了,就是其提供了自动求导功能,也就是可以自动给你你要的参数的梯度,这个操作又另外一个基本元素提供,Variable
# -*- coding: utf-8 -*-import torcha = torch.Tensor(3,3)print a.size()b = a.numpy()print torch.from_numpy(b)
本质上Variable和Tensor没有区别,不过Variabel会放入一个计算图,然后进行前向传播,反向传播以及自动求导
一个Variable里面包含着三个属性,data,grad和creator,其中creator表示得到这个Variabel的操作,比如乘法或者加法等等,grad表示方向传播的梯度,data表示取出这个Variabel里面的数据
# -*- coding: utf-8 -*-import numpy as npimport torchfrom torch.autograd import Variableimport torch.nn as nnimport torch.nn.functional as F# requires_grad 表示是否对其求梯度,默认是Truex = Variable(torch.Tensor([3]), requires_grad=True)y = Variable(torch.Tensor([5]), requires_grad=True)z = 2*x + y + 4# 对x和y分别求导print z.backward()# x的导数和y的导数print('dz/dx:{}'.format(x.grad.data))print('dz/dy:{}'.format(y.grad.data))
输出
Nonedz/dx: 2[torch.FloatTensor of size 1]dz/dy: 1[torch.FloatTensor of size 1]
这就是一个简单的计算图的例子
神经网络
前面讲了两个操作对象,最后讲一下pytorch里面的模型建立,模型的建立主要依赖于torch.nn,torch.nn包含这个所有神经网络的层的结构
# -*- coding: utf-8 -*-import numpy as npimport torchfrom torch.autograd import Variableimport torch.nn as nnimport 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
这就是构建所有神经网络的模板,不管你想构建卷积神经网络还是循环神经网络或者是生成对抗网络都依赖于这个结构
在这里,我整理发布了Pytorch中文文档,方便大家查询使用,同时也准备了中文论坛,欢迎大家学习交流!
Pytorch中文文档已经发布,完美翻译,更加方便大家浏览:
Pytorch中文网:https://ptorch.com/
Pytorch中文文档:https://ptorch.com/docs/1/