01
PyTorch 简介
02
1.1 – Why PyTorch?为什么用 PyTorchPyTorch 是 Torch 在 Python 上的衍生. 因为 Torch 是一个使用 Lua 语言的神经网络库, Torch 很好用, 但是 Lua 又不是特别流行, 所有开发团队将 Lua 的 Torch 移植到了更流行的语言 Python 上. 是的 PyTorch 一出生就引来了剧烈的反响. 为什么呢? 很简单, 我们就看看有谁在用 PyTorch 吧. 可见, 著名的 Facebook, twitter 等都在使用它, 这就说明 PyTorch 的确是好用的, 而且是值得推广. 而且如果你知道 Numpy, PyTorch 说他就是在神经网络领域可以用来替换 numpy 的模块. 神经网络在做什么神经网络在学习拟合线条(回归): 神经网络在学习区分数据(分类): PyTorch 和 Tensorflow据 PyTorch 自己介绍, 他们家的最大优点就是建立的神经网络是动态的, 对比静态的 Tensorflow, 他能更有效地处理一些问题, 比如说 RNN 变化时间长度的输出. 而我认为, 各家有各家...
03
1.2 – 安装 PyTorch支持的系统PyTorch 暂时只支持 MacOS, Linux. 暂不支持 Windows! (可怜的 Windows 同学们.. 又被抛弃了). 不过说不定像 Tensorflow 一样, 因为 Windows 用户的强烈要求, 他们在某天就突然支持了. 安装PyTorch 安装起来很简单, 它自家网页上就有很方便的选择方式 (网页升级改版后可能和下图有点不同): 所以根据你的情况选择适合你的安装方法, 我已自己为例, 我使用的是 MacOS, 想用 pip 安装, 我的 Python 是 3.5 版的, 我没有 GPU 加速, 那我就按上面的选: 然后根据上面的提示, 我只需要在我的 Terminal 当中输入以下指令就好了: 12$ pip install http://download.pytorch.org/whl/torch-0.1.11.post5-cp35-cp35m-macosx_10_7_x86_64.whl$ pip install torchvision 注意, 我安装的是0.1.11版本的 torch, 你需要去他们网...
05
2.1 – Torch vs Numpy用 Numpy 还是 TorchTorch 自称为神经网络界的 Numpy, 因为他能将 torch 产生的 tensor 放在 GPU 中加速运算 (前提是你有合适的 GPU), 就像 Numpy 会把 array 放在 CPU 中加速运算. 所以神经网络的话, 当然是用 Torch 的 tensor 形式数据最好咯. 就像 Tensorflow 当中的 tensor 一样. 当然, 我们对 Numpy 还是爱不释手的, 因为我们太习惯 numpy 的形式了. 不过 torch 看出来我们的喜爱, 他把 torch 做的和 numpy 能很好的兼容. 比如这样就能自由地转换 numpy array 和 torch tensor 了: 1234567891011import torchimport numpy as npnp_data = np.arange(6).reshape((2, 3))torch_data = torch.from_numpy(np_data)tensor2array = torch_data.numpy()pri...
04
PyTorch 神经网络基础
06
2.2 – 变量 (Variable)什么是 Variable在 Torch 中的 Variable 就是一个存放会变化的值的地理位置. 里面的值会不停的变化. 就像一个裝鸡蛋的篮子, 鸡蛋数会不停变动. 那谁是里面的鸡蛋呢, 自然就是 Torch 的 Tensor 咯. 如果用一个 Variable 进行计算, 那返回的也是一个同类型的 Variable. 我们定义一个 Variable: 12345678910111213141516171819202122import torchfrom torch.autograd import Variable # torch 中 Variable 模块# 先生鸡蛋tensor = torch.FloatTensor([[1,2],[3,4]])# 把鸡蛋放到篮子里, requires_grad是参不参与误差反向传播, 要不要计算梯度variable = Variable(tensor, requires_grad=True)print(tensor)""" 1 2 3 4[torch.FloatTen...
07
2.3 – 激励函数 (Activation)什么是 Activation一句话概括 Activation: 就是让神经网络可以描述非线性问题的步骤, 是神经网络变得更强大. 如果还不是特别了解, 我有制作一个动画短片(如下), 浅显易懂的阐述了激励函数的作用. 包懂. Torch 中的激励函数Torch 中的激励函数有很多, 不过我们平时要用到的就这几个. relu, sigmoid, tanh, softplus . 那我们就看看他们各自长什么样啦. 1234567import torchimport torch.nn.functional as F # 激励函数都在这from torch.autograd import Variable# 做一些假数据来观看图像x = torch.linspace(-5, 5, 200) # x data (tensor), shape=(100, 1)x = Variable(x) 接着就是做生成不同的激励函数数据: 12345678x_np = x.data.numpy() # 换成 numpy array, 出图时用...
08
建造第一个神经网络
11
3.3 – 快速搭建回归神经网络Torch 中提供了很多方便的途径, 同样是神经网络, 能快则快, 我们看看如何用更简单的方式搭建同样的回归神经网络. 快速搭建我们先看看之前写神经网络时用到的步骤. 我们用 net1 代表这种方式搭建的神经网络. 123456789101112class Net(torch.nn.Module): def __init__(self, n_feature, n_hidden, n_output): super(Net, self).__init__() self.hidden = torch.nn.Linear(n_feature, n_hidden) self.predict = torch.nn.Linear(n_hidden, n_output) def forward(self, x): x = F.relu(self.hidden(x)) x = self.predict(x) return xnet1 = Net(1, 10, 1) ...
09
3.1 – 关系拟合 (回归 Regression)我会这次会来见证神经网络是如何通过简单的形式将一群数据用一条线条来表示. 或者说, 是如何在数据当中找到他们的关系, 然后用神经网络模型来建立一个可以代表他们关系的线条. 建立数据集我们创建一些假数据来模拟真实的情况. 比如一个一元二次函数: y = a * x^2 b , 我们给 y 数据加上一点噪声来更加真实的展示它. 12345678910111213import torchfrom torch.autograd import Variableimport matplotlib.pyplot as pltx = torch.unsqueeze(torch.linspace(-1, 1, 100), dim=1) # x data (tensor), shape=(100, 1)y = x.pow(2) 0.2*torch.rand(x.size()) # noisy y data (tensor), shape=(100, 1)# 用 Variable 来修...














