10
3.2 – 区分类型 (分类 Classification)这次我们也是用最简单的途径来看看神经网络是怎么进行事物的分类. 建立数据集我们创建一些假数据来模拟真实的情况. 比如两个二次分布的数据, 不过他们的均值都不一样. 123456789101112131415161718192021222324import torchfrom torch.autograd import Variableimport matplotlib.pyplot as plt# 假数据n_data = torch.ones(100, 2) # 数据的基本形态x0 = torch.normal(2*n_data, 1) # 类型0 x data (tensor), shape=(100, 2)y0 = torch.zeros(100) # 类型0 y data (tensor), shape=(100, 1)x1 = torch.normal(-2*n_data, 1) # 类型1 x data (tensor), shape=(100, ...
12
3.4 – 保存和恢复模型训练好了一个模型, 我们当然想要保存它, 留到下次要用的时候直接提取直接用, 这就是这节的内容啦. 我们用回归的神经网络举例实现保存提取. 保存我们快速地建造数据, 搭建网络: 123456789101112131415161718192021222324torch.manual_seed(1) # reproducible# 假数据x = 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)x, y = Variable(x, requires_grad=False), Variable(y, requires_grad=False)def save(): # 建网络 net1 = torch.nn.Sequential( torch.nn.Lin...
13
3.5 – 数据读取 (Data Loader)DataLoader 是 torch 给你用来包装你的数据的工具. 所以你要讲自己的 (numpy array 或其他) 数据形式装换成 Tensor, 然后再放进这个包装器中. 使用 DataLoader 有什么好处呢? 就是他们帮你有效地迭代数据, 举例: 123456789101112131415161718192021222324252627282930313233343536import torchimport torch.utils.data as Datatorch.manual_seed(1) # reproducibleBATCH_SIZE = 5 # 批训练的数据个数x = torch.linspace(1, 10, 10) # x data (torch tensor)y = torch.linspace(10, 1, 10) # y data (torch tensor)# 先转换成 torch 能识别的 Datasettorch_dataset = Data.Te...
14
3.6 – 优化器 (Optimizer)这节内容主要是用 Torch 实践几种优化器, 这几种优化器具体的优势不会在这个节内容中说了, 所以想快速了解的话, 上面的那个动画链接是很好的去处. 下图就是这节内容对比各种优化器的效果: 伪数据为了对比各种优化器的效果, 我们需要有一些数据, 今天我们还是自己编一些伪数据, 这批数据是这样的: 1234567891011121314151617181920212223import torchimport torch.utils.data as Dataimport torch.nn.functional as Ffrom torch.autograd import Variableimport matplotlib.pyplot as plttorch.manual_seed(1) # reproducibleLR = 0.01BATCH_SIZE = 32EPOCH = 12# fake datasetx = torch.unsqueeze(torch.linspace(-1, 1, 1000), dim=1)y = x....
15
高级神经网络结构
16
4.1 – CNN 卷积神经网络卷积神经网络目前被广泛地用在图片识别上, 已经有层出不穷的应用, 如果你对卷积神经网络还没有特别了解, 我制作的 卷积神经网络 动画简介 (如下) 能让你花几分钟就了解什么是卷积神经网络. 接着我们就一步一步做一个分析手写数字的 CNN 吧. 下面是一个 CNN 最后一层的学习过程, 我们先可视化看看: MNIST手写数据1234567891011121314151617181920212223import torchimport torch.nn as nnfrom torch.autograd import Variableimport torch.utils.data as Dataimport torchvision # 数据库模块import matplotlib.pyplot as plttorch.manual_seed(1) # reproducible# Hyper ParametersEPOCH = 1 # 训练整批数据多少次, 为了节约时间, 我们只训练一次BATCH_SIZE = 50L...
19
4.4 – AutoEncoder (自编码/非监督学习)神经网络也能进行非监督学习, 只需要训练数据, 不需要标签数据. 自编码就是这样一种形式. 自编码能自动分类数据, 而且也能嵌套在半监督学习的上面, 用少量的有标签样本和大量的无标签样本学习. 这次我们还用 MNIST 手写数字数据来压缩再解压图片. 然后用压缩的特征进行非监督分类. 训练数据自编码只用训练集就好了, 而且只需要训练 training data 的 image, 不用训练 labels. 123456789101112131415161718192021import torchimport torch.nn as nnfrom torch.autograd import Variableimport torch.utils.data as Dataimport torchvision# 超参数EPOCH = 10BATCH_SIZE = 64LR = 0.005DOWNLOAD_MNIST = True # 下过数据的话, 就可以设置成 FalseN_TEST_IMG = 5 ...
17
4.2 – RNN 循环神经网络 (分类 Classification)循环神经网络让神经网络有了记忆, 对于序列话的数据,循环神经网络能达到更好的效果. 如果你对循环神经网络还没有特别了解, 请观看几分钟的短动画, RNN 动画简介(如下) 和 LSTM(如下) 动画简介 能让你生动理解 RNN. 接着我们就一步一步做一个分析手写数字的 RNN 吧. RNN 简介LSTM 简介MNIST手写数据12345678910111213141516171819202122232425import torchfrom torch import nnfrom torch.autograd import Variableimport torchvision.datasets as dsetsimport torchvision.transforms as transformsimport matplotlib.pyplot as plttorch.manual_seed(1) # reproducible# Hyper ParametersEPOCH = 1 # 训...
20
4.5 – DQN 强化学习 (Reinforcement Learning)Torch 是神经网络库, 那么也可以拿来做强化学习, 之前我用另一个强大神经网络库 Tensorflow来制作了这一个 从浅入深强化学习教程, 你同样也可以用 PyTorch 来实现, 这次我们就举 DQN 的例子, 我对比了我的 Tensorflow DQN 的代码, 发现 PyTorch 写的要简单很多. 如果对 DQN 或者强化学习还没有太多概念, 强烈推荐我的这个DQN动画短片(如下), 让你秒懂DQN. 还有强推这套花了我几个月来制作的强化学习教程! https://www.pytorchtutorial.com/wp-content/uploads/2017/08/cartpole-dqn.mp4 模块导入和参数设置这次除了 Torch 自家模块, 我们还要导入 Gym 环境库模块. 123456789101112131415161718import torchimport torch.nn as nnfrom torch.autograd import Variableimport to...
18
4.3 – RNN 循环神经网络 (回归 Regression)循环神经网络让神经网络有了记忆, 对于序列话的数据,循环神经网络能达到更好的效果. 如果你对循环神经网络还没有特别了解, 请观看几分钟的短动画,RNN 动画简介(如下) 和 LSTM(如下)动画简介 能让你生动理解 RNN. 上次我们提到了用 RNN 的最后一个时间点输出来判断之前看到的图片属于哪一类, 这次我们来真的了, 用 RNN 来及时预测时间序列. RNN 简介LSTM 简介训练数据我们要用到的数据就是这样的一些数据, 我们想要用 sin 的曲线预测出 cos 的曲线. 12345678910111213import torchfrom torch import nnfrom torch.autograd import Variableimport numpy as npimport matplotlib.pyplot as plttorch.manual_seed(1) # reproducible# Hyper ParametersTIME_STEP = 10 # rnn time...













