
动手学PyTorch
CoreJT
中科院自动化所在读直博生,感兴趣的研究方向:文本分类、情感分析、机器阅读理解与问答系统以及对话系统。
展开
-
动手学PyTorch | (59) 微调(fine-tuning)
在前⾯的一些章节中,我们介绍了如何在只有6万张图像的Fashion-MNIST训练数据集上训练模型。我们还描述了学术界当下使用最⼴泛的⼤规模图像数据集ImageNet,它有超过1,000万的图像和1,000类的物体。然而,我们平常接触到数据集的规模通常在这两者之间。假设我们想从图像中识别出不同种类的椅子,然后将购买链接推荐给用户。一种可能的⽅法是先找出100种常见的椅子,为每种椅⼦拍摄1,0...原创 2019-11-28 12:28:27 · 1053 阅读 · 1 评论 -
动手学PyTorch | (55) 束搜索
上⼀节介绍了如何训练输入和输出均为不定⻓序列的编码器—解码器。本节我们介绍如何使用编码器—解码器来预测不定⻓长的序列。上⼀节里已经提到,在准备训练数据集时,我们通常会在样本的输⼊序列和输出序列后⾯分别附上⼀个特殊符号"<eos>"表示序列的终止。我们在接下来的讨论中也将沿用上一节的全部数学符号。为了便于讨论,假设解码器的输出是一段⽂本序列。设输出⽂本词典 (包含特殊符号"<e...原创 2019-11-28 12:28:08 · 1976 阅读 · 1 评论 -
动手学PyTorch | (46) PyTorch中模型的使用
神经网络训练后我们需要将模型进行保存,要用的时候将保存的模型进行加载,PyTorch 中保存和加载模型主要分为两类:保存加载整个模型和只保存加载模型参数。目录1. 保存加载模型基本用法2. 保存加载自定义模型3. 跨设备保存加载模型4. CUDA的用法1. 保存加载模型基本用法保存加载整个模型保存整个网络模型(网络结构+权重参数)。torch.save(mode...原创 2019-11-27 08:56:06 · 495 阅读 · 0 评论 -
动手学PyTorch | (45) PyTorch Tricks
目录1. 指定GPU编号2. 查看模型每层的输出情况3. 梯度裁剪4. 扩展单张图片的维度5. 独热编码6. 防止验证模型时爆显存7. 学习率衰减8. 冻结某些层的参数9. 对不同层使用不同的学习率1. 指定GPU编号方式1设置当前使用的GPU为0号设备:os.environ["CUDA_VISIBLE_DEVICES"] = "0"设置当前...原创 2019-11-27 08:56:00 · 277 阅读 · 0 评论 -
动手学PyTorch | (44) Adam算法
Adam算法在RMSProp算法基础上对⼩批量随机梯度也做了指数加权移动平均。下面我们来介绍这个算法。所以Adam算法可以看做是RMSProp算法与动量法的结合。目录1. 算法2. 从0开始实现3. 简洁实现4. 小结1. 算法Adam中使用了动量变量和RMSprop算法中小批量随机梯度按元素平方的指数加权移动平均变量,并在时间步0将它们中每个元素初始化为0。给定超参数...原创 2019-11-26 17:50:05 · 1446 阅读 · 0 评论 -
动手学PyTorch | (41) Adagrad算法
在之前介绍过的优化算法中,⽬标函数⾃变量的每一个元素在相同时间步都使用同一个学习率来⾃我迭代。举个例子,假设⽬标函数为f,⾃变量为一个二维向量,该向量中每一个元素在迭代时都使⽤相同的学习率。例如,在学习率为的梯度下降中,元素都使用相同的学习率来自我迭代:在(动量法)里我们看到当的梯度值有较大差别时,需要选择⾜够小的学习率使得⾃变量(参数)在梯度值较大的维度上不发散。但这样会导致⾃变量在梯度...原创 2019-11-26 17:49:51 · 3666 阅读 · 1 评论 -
动手学PyTorch | (39) 小批量随机梯度下降
目录1. 小批量梯度下降2. 读取数据3. 从0开始实现4. 简洁实现5. 小结1. 小批量梯度下降在每一次迭代中,梯度下降使用整个训练数据集来计算梯度,因此它有时也被称为批量梯度下降 (batch gradient descent)。而随机梯度下降在每次迭代中只随机采样一个样本来计算梯度。正如我们在前几节中所看到的,我们还可以在每轮迭代中随机均匀采样多个样本来组成一个...原创 2019-11-26 17:49:41 · 3846 阅读 · 0 评论 -
动手学PyTorch | (37) 优化与深度学习
本节将讨论优化与深度学习的关系,以及优化在深度学习中的挑战。在⼀个深度学习问题中,我们通常会预先定义一个损失函数。有了损失函数以后,我们就可以使用优化算法试图将其最小化。在优化中, 这样的损失函数通常被称作优化问题的目标函数(objective function)。依据惯例,优化算法通常只考虑最⼩化⽬标函数。其实,任何最大化问题都可以很容易地转化为最小化问题,只需令⽬标函数的相反数为新的⽬标函数即...原创 2019-11-26 17:49:25 · 328 阅读 · 0 评论 -
动手学PyTorch | (35) 长短期记忆(LSTM)
本节将介绍另一种常⽤的⻔控循环神经网络:长短期记忆(long short-term memory,LSTM)。它⽐⻔控循环单元的结构稍微复杂一点。目录1. 长短期记忆2. 读取数据集3. 从0开始实验4. 简洁实现5. 小结1. 长短期记忆LSTM中引⼊了3个门,即输入门(input gate)、遗忘门(forget gate)和输出门(output gate),...原创 2019-11-26 11:15:46 · 1164 阅读 · 0 评论 -
动手学PyTorch | (33) 通过时间反向传播
在前⾯两节中,如果不裁剪梯度,模型将⽆法正常训练。为了深刻理解这一现象,本节将介绍循环神经⽹络中梯度的计算和存储⽅法,即通过时间反向传播(back-propagation through time)。我们在(正向传播、反向传播和计算图)中介绍了神经⽹络中梯度计算与存储的⼀般思路,并强调正向传播和反向传播相互依赖。正向传播在循环神经⽹络中⽐较直观,而通过时间反向传播其实是反向传播在循环神经网络中...原创 2019-11-25 20:34:46 · 364 阅读 · 0 评论 -
动手学PyTorch | (25) 网络中的网络(NIN)
前⼏节介绍的LeNet、AlexNet和VGG在设计上的共同之处是:先以由卷积层构成的模块充分抽取空间特征,再以由全连接层构成的模块来输出分类结果。其中,AlexNet和VGG对LeNet的改进主要在于如何对这两个模块加宽(增加通道数)和加深。本节我们介绍⽹络中的⽹络(NiN)。它提出了另外⼀个思路,即串联多个由卷积层和“全连接”层构成的⼩网络来构建⼀个深层网络。目录1. NIN块2....原创 2019-11-25 09:05:42 · 402 阅读 · 0 评论 -
动手学PyTorch | (23) AlexNet
在LeNet提出后的将近20年里,神经⽹络⼀度被其他机器学习⽅法超越,如支持向量机。虽然LeNet可以在早期的⼩数据集上取得好的成绩,但是在更大的真实数据集上的表现并不尽如人意。⼀⽅面,神经⽹络计算复杂。虽然20世纪90年代也有过⼀一些针对神经网络的加速硬件,但并没有像之后GPU那样⼤量普及。因此,训练⼀个多通道、多层和有大量参数的卷积神经网络在当年很难完成。另⼀方面,当年研究者还没有⼤量深⼊研究...原创 2019-11-23 09:16:25 · 490 阅读 · 0 评论 -
动手学PyTorch | (17) 读取和存储
到目前为止,我们介绍了如何处理数据以及如何构建、训练和测试深度学习模型。然⽽在实际中,我们有时需要把训练好的模型部署到很多不同的设备。在这种情况下,我们可以把内存中训练好的模型参数存储在硬盘上供后续读取使用。import torchfrom torch import nn目录1. 读取Tensor2. 读写模型3. 小结1. 读取Tensor我们可以直接使⽤save...原创 2019-11-20 22:18:45 · 354 阅读 · 0 评论 -
动手学PyTorch | (14) 模型构造
让我们回顾⼀下在(多层感知机的简洁实现)中含单隐藏层的多层感知机的实现方法。我们⾸先构造Sequential实例,然后依次添加两个全连接层。其中第一层的输出⼤小为256,即隐藏层单元个数是256;第二层的输出⼤小为10,即输出层单元个数是10。我们在其他小节中也使用了Sequential类构造模型。这⾥我们介绍另外⼀种基于Module类的模型构造方法:它让模型构造更更加灵活。目录1. 继承...原创 2019-11-20 10:15:42 · 938 阅读 · 0 评论 -
动手学PyTorch | (10) Dropout(丢弃法)
除了前⼀节介绍的权????重衰减以外,深度学习模型常常使用丢弃法(dropout)来应对过拟合问题。丢弃法有⼀些不同的变体。本节中提到的丢弃法特指倒置丢弃法(inverted dropout)。目录1. 方法2. 从0开始实现3. 简洁实现4. 小结1. 方法回忆⼀下,(多层感知机)的图示描述了一个单隐藏层的多层感知机。其中输⼊个数为4,隐藏单元个数为5,且隐藏单元的计算表达...原创 2019-11-17 10:28:20 · 3766 阅读 · 1 评论 -
动手学PyTorch | (9) 权重衰减
上⼀节中我们观察了过拟合现象,即模型的训练误差远⼩于它在测试集上的误差。虽然增⼤训练数据集可能会减轻过拟合,但是获取额外的训练数据往往代价⾼昂。本节介绍应对过拟合问题的常用⽅法:权????衰减(weight decay)。目录1. 方法2.高维线性回归实验3. 从0开始实现4. 简洁实现5. 小结1. 方法权????重衰减等价于范数正则化(regularization)。正则化...原创 2019-11-16 16:34:30 · 3912 阅读 · 1 评论 -
动手学PyTorch | (6) 多层感知机
我们已经介绍了包括线性回归和softmax回归在内的单层神经⽹络。然⽽深度学习主要关注多层模型。在本节中,我们将以多层感知机(multilayer perceptron,MLP)为例,介绍多层神经网络的概念。目录1. 隐藏层2. 激活函数3. 多层感知机4. 小结1. 隐藏层多层感知机在单层神经⽹络的基础上引⼊了一到多个隐藏层(hidden layer)。隐藏层位于输⼊...原创 2019-11-14 11:00:09 · 505 阅读 · 0 评论 -
动手学PyTorch | (5) Softmax回归实验
目录1. 图像分类数据集(Fashion-Mnist)2. Softmax回归从0开始实现3. Softmax回归的简洁实现1. 图像分类数据集(Fashion-Mnist)在介绍softmax回归的实现前我们先引⼊一个多类图像分类数据集。它将在后面的实验中被多次使用, 以⽅便我们观察⽐较算法之间在模型精度和计算效率上的区别。图像分类数据集中最常⽤的是⼿写数字识别数据集MNIS...原创 2019-11-12 14:23:10 · 2251 阅读 · 2 评论 -
动手学PyTorch | (4) Softmax回归
前面介绍的线性回归模型适⽤于输出为连续值的情景。在另一类情景中,模型输出可以是一个像图像的类别这样的离散值。对于这样的离散值预测问题,我们可以使⽤诸如softmax回归在内的分类模型。和线性回归不不同,softmax回归的输出单元从⼀一个变成了多个,且引⼊了softmax运算使输出更适合离散值的预测和训练。本节以softmax回归模型为例,介绍神经⽹络中的分类模型。目录1. 分类问题2...原创 2019-11-12 11:16:55 · 2249 阅读 · 0 评论 -
动手学Pytorch | (2) 自动求梯度
在深度学习中,我们经常需要对函数求梯度(gradient)。PyTorch提供的autograd包能够根据输⼊和前向传播过程自动构建计算图,并执行反向传播。本节将介绍如何使用autograd包来进行自动求梯度的有关操作。目录1. 概念2. Tensor3. 梯度1. 概念上⼀节介绍的Tensor是这个包的核心类,如果将其属性.requires_grad设置为True,它将开...原创 2019-11-05 11:37:26 · 624 阅读 · 0 评论