![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
pytorch
栗子好好吃
向来心是看客心,奈何人是剧中人
展开
-
[pytorch、学习] - 9.2 微调
参考9.2 微调在前面得一些章节中,我们介绍了如何在只有6万张图像的Fashion-MNIST训练数据集上训练模型。我们还描述了学术界当下使用最广泛规模图像数据集ImageNet,它有超过1000万的图像和1000类的物体。然而,我们平常接触到数据集的规模通常在这两者之间。假设我们想从图像中识别出不同种类的椅子,然后将购买链接推荐给用户。一种可能的方法是先找出100种常用的椅子,为椅子拍摄1000张不同角度的图像,然后在收集到的图像数据集上训练一个分类模型。这个椅子数据集虽然可能比Fashion-MN转载 2020-07-10 11:43:10 · 272 阅读 · 0 评论 -
[pytorch、学习] - 9.1 图像增广
参考9.1 图像增广在5.6节(深度卷积神经网络)里我们提过,大规模数据集是成功应用神经网络的前提。图像增广(image augmentation)技术通过对训练图像做一系列随机改变,来产生相似但又不相同的训练样本,从而扩大训练数据集的规模。图像增广的另一种解释是,随机改变训练样本可以降低模型对某些属性的依赖,从而提高模型的泛化能力。import timeimport torchfrom torch import nn, optimfrom torch.utils.data import Dat转载 2020-07-10 11:32:01 · 603 阅读 · 0 评论 -
[pytorch、学习] - 5.9 含并行连结的网络(GoogLeNet)
参考(https://tangshusen.me/Dive-into-DL-PyTorch/#/chapter05_CNN/5.9_googlenet)5.9 含并行连结的网络(GoogLeNet)在2014年的ImageNet图像识别挑战赛中,一个名叫GoogLeNet的网络结构大放异彩。它虽然在名字上向LeNet致敬,但在网络结构上已经很难看到LeNet的影子。GoogLeNet吸收了NiN中网络串联网络的思想,并在此基础上做了很大改进。在随后的几年里,研究人员对GoogLeNet进行了数次改进,本转载 2020-07-09 10:05:53 · 790 阅读 · 0 评论 -
[pytorch、学习] - 5.8 网络中的网络(NiN)
参考5.8 网络中的网络(NiN)前几节介绍的LeNet、AlexNet和VGG在设计上的共同之处是:先以由卷积层构成的模块充分抽取空间特征,再以由全连接层构成的模块来输出分类结果。其中,AlexNet和VGG对LeNet的改进主要在于如何对这两个模块加宽(增加通道数)和加深。本节我们介绍网络中的网络(NiN)。它提出了另外一个思路,即串联多个由卷积层和“全连接”层构成的小网络来构建一个深层网络。5.8.1 NiN块我们知道,卷积层的输入和输出通常是四维数组(样本, 通道, 高, 宽),而全连接层的转载 2020-07-08 10:43:29 · 232 阅读 · 0 评论 -
[pytorch、学习] - 5.7 使用重复元素的网络(VGG)
参考5.7 使用重复元素的网络(VGG)AlexNet在LeNet的基础上增加了3个卷积层。但AlexNet作者对它们的卷积窗口、输出通道数和构造顺序均做了大量的调整。虽然AlexNet指明了深度卷积神经网络可以取得出色的结果,但并没有提供简单的规则以指导后来的研究者如何设计新的网络。我们将在本章的后续几节里介绍几种不同的深度网络设计思路。下面介绍VGG5.7.1 VGG块VGG块的组成规律是:连续使用数个相同的填充为1、窗口形状为3×3的卷积层后接上一个步幅为2、窗口形状为2×2的最大池化层。卷转载 2020-07-08 10:37:17 · 436 阅读 · 0 评论 -
[pytorch、学习] - 5.6 深度卷积神经网络(AlexNet)
参考5.6 深度卷积神经网络(AlexNet)在LeNet提出后的将近20年里,神经网络一度被其他机器学习方法超越,如支持向量机。虽然LeNet可以在早期的小数据集上取得好的成绩,但是在更大的真实数据集上的表现并不尽如人意。一方面,神经网络计算复杂。虽然20世纪90年代也有过一些针对神经网络的加速硬件,但并没有像之后GPU那样大量普及。因此,训练一个多通道、多层和有大量参数的卷积神经网络在当年很难完成。另一方面,当年研究者还没有大量深入研究参数初始化和非凸优化算法等诸多领域,导致复杂的神经网络的训练通常转载 2020-07-08 10:33:25 · 360 阅读 · 0 评论 -
[pytorch、学习] - 5.5 卷积神经网络(LeNet)
参考5.5 卷积神经网络(LeNet)卷积层尝试解决两个问题:卷积层保留输入形状,使图像的像素在高和宽两个方向上的相关性均可能被有效识别;卷积层通过滑动窗口将同一卷积核和不同位置的输入重复计算,从而避免参数尺寸过大。5.5.1 LeNet模型LeNet分为卷积层块和全连接层块两个部分.卷积层块的基本单位是卷积层后接最大池化层: 卷积层用来识别图像里的空间模式(线条和物体局部),之后最大池化用来降低卷积层对位置的敏感性。卷积层块由两个这样的基本单位重复堆叠构成。在卷积层块中,每个卷积层都转载 2020-07-08 10:26:01 · 323 阅读 · 0 评论 -
[pytorch、学习] - 5.4 池化层
参考5.4 池化层在本节中我们介绍池化(pooling)层,它的提出是为了缓解卷积层对位置的过度敏感性。5.4.1 二维最大池化层和平均池化层池化层直接计算池化窗口内元素的最大值或者平均值。该运算也叫做最大池化层或平均池化层。下面把池化层的前向计算实现在pool2d函数里。import torchimport torch.nn as nndef pool2d(X, pool_size, mode="max"): X = X.float() p_h, p_w = pool_转载 2020-07-08 10:22:38 · 384 阅读 · 0 评论 -
[pytorch、学习] - 5.3 多输入通道和多输出通道
参考5.3 多输入通道和多输出通道前面两节里我们用到的输入和输出都是二维数组,但真实数据的维度经常更高。例如,彩色图像在高和宽2个维度外还有RGB(红、绿、蓝)3个颜色通道。假设彩色图像的高和宽分别是h和w(像素),那么它可以表示为一个3 * h * w的多维数组。我们将大小为3的这一维称为通道(channel)维。本节将介绍含多个输入通道或多个输出通道的卷积核。5.3.1 多输入通道接下来我们实现含多个输入通道的互相关运算。我们只需要对每个通道做互相关运算,然后通过add_n函数来进行累加im转载 2020-07-08 10:17:53 · 2764 阅读 · 0 评论 -
[pytorch、学习] - 5.2 填充和步幅
参考5.2 填充和步幅5.2.1 填充填充(padding)是指在输入高和宽的两侧填充元素(通常是0元素)。图5.2里我们在原输入高和宽的两侧分别添加了值为0的元素,使得输入高和宽从3变成了5,并导致输出高和宽由2增加到4。图5.2中的阴影部分为第一个输出元素及其计算所使用的输入和核数组元素: 0 * 0 + 0 * 1 + 0 * 2 + 0 * 3 = 0.下面的例子里,我们创建一个高和宽为3的二维卷积层,然后设输入高和宽的填充数分别为1。给定一个高和宽为8的输入,我们发现输出的高和宽也是8转载 2020-07-07 11:04:53 · 361 阅读 · 0 评论 -
[pytorch、学习] - 5.1 二维卷积层
参考5.1 二维卷积层卷积神经网络(convolutional neural network)是含有卷积层(convolutional layer)的神经网络。本章介绍的卷积神经网络均使用最常见的二维卷积层。它有高和宽两个空间维度,常用来处理图像数据。本节中,我们将介绍简单形式的二维卷积层的工作原理。5.1.1 二维互相关运算# 将上述过程实现在 corr2d 函数里.它接受输入数组 X 与核数组 K,并输出数组 Yimport torch from torch import nndef转载 2020-07-07 10:59:43 · 299 阅读 · 0 评论 -
[pytorch、学习] - 4.6 GPU计算
参考4.6 GPU计算到目前为止,我们一直使用CPU进行计算。对复杂的神经网络和大规模数据来说,使用CPU来计算可能不够高效。在本节中,将要介绍如何使用单块NIVIDA GPU进行计算4.6.1 计算设备PyTorch可以指定用来存储和计算的设备,如果用内存的CPU或者显存的GPU。默认情况下,PyTorch会将数据创建在内存,然后利用GPU来计算。用torch.cuda.is_available()查看GPU是否可用:import torchfrom torch import nnto转载 2020-07-07 10:53:24 · 205 阅读 · 0 评论 -
[pytorch、学习] - 4.5 读取和存储
参考4.5 读取和存储到目前为止,我们介绍了如何处理数据以及如何构建、训练和测试深度学习模型。然而在实际中,我们有时需要把训练好的模型部署到很多不同的设备。在这种情况下,我们可以把内存中训练好的模型参数存储在硬盘上供后续读取使用。4.5.1 读写tensor我们可以直接使用save函数和load函数分别存储和读取Tensor。下面的例子创建了Tensor变量x,并将其存储在文件名为x.pt的文件里.import torchimport torch.nn as nnx = torch.one转载 2020-07-07 10:48:32 · 301 阅读 · 0 评论 -
[pytorch、学习] - 4.4 自定义层
参考4.4 自定义层深度学习的一个魅力在于神经网络中各式各样的层,例如全连接层和后面章节将要用介绍的卷积层、池化层与循环层。虽然PyTorch提供了大量常用的层,但有时候我们依然希望自定义层。本节将介绍如何使用Module来自定义层,从而可以被重复调用。4.4.1 不含模型参数的自定义层我们先介绍如何定义一个不含模型参数的自定义层。import torchfrom torch import nnclass CenteredLayer(nn.Module): def __init__(转载 2020-07-07 10:40:51 · 634 阅读 · 0 评论 -
[pytorch、学习] - 4.2 模型参数的访问、初始化和共享
参考4.2 模型参数的访问、初始化和共享在3.3节(线性回归的简洁实现)中,我们通过init模块来初始化模型的参数。我们也介绍了访问模型参数的简单方法。本节将深入讲解如何访问和初始化模型参数,以及如何在多个层之间共享同一份模型参数。import torchfrom torch import nnfrom torch.nn import initnet = nn.Sequential(nn.Linear(4,3), nn.ReLU(), nn.Linear(3, 1))print(net)转载 2020-07-07 10:37:00 · 380 阅读 · 0 评论 -
[pytorch、学习] - 4.1 模型构造
参考4.1 模型构造让我们回顾以下多重感知机的简洁实现中包含单隐藏层的多重感知机的实现方法。我们首先构造Sequential实例,然后依次添加两个全连接层。其中第一层的输出大小为256,即隐藏层单元个数是256;第二层的输出大小为10,即输出层单元个数是10.4.1.1 继承Module类来构造模型Module类是nn模块里提供的一个模型构造类,是所有神经网络模块的基类,我们可以继承它来定义我们想要的模型。下面继承Module类构造本节开头提到的多层感知机。这里定义的MLP类重载了Module类的_转载 2020-07-07 10:31:49 · 257 阅读 · 0 评论 -
[pytorch、学习] - 3.13 丢弃法
参考3.13 丢弃法过拟合问题的另一种解决办法是丢弃法。当对隐藏层使用丢弃法时,隐藏单元有一定概率被丢弃。3.12.1 方法3.13.2 从零开始实现import torchimport torch.nn as nnimport numpy as npimport syssys.path.append("..") import d2lzh_pytorch as d2ldef dropout(X, drop_prob): X = X.float() assert 0转载 2020-07-07 10:25:47 · 220 阅读 · 0 评论 -
[pytorch、学习] - 3.12 权重衰减
参考3.12 权重衰减本节介绍应对过拟合的常用方法3.12.1 方法正则化通过为模型损失函数添加惩罚项使学出的模型参数更小,是应对过拟合的常用手段。3.12.2 高维线性回归实验import torchimport torch.nn as nnimport numpy as npimport syssys.path.append("..") import d2lzh_pytorch as d2ln_train, n_test, num_inputs = 20, 100, 200转载 2020-07-07 10:20:39 · 585 阅读 · 0 评论 -
[pytorch、学习] - 3.11 模型选择、欠拟合和过拟合
参考3.11 模型选择、欠拟合和过拟合3.11.1 训练误差和泛化误差在解释上述现象之前,我们需要区分训练误差(training error)和泛化误差(generalization error)。通俗来讲,前者指模型在训练数据集上表现出的误差,后者指模型在任意一个测试数据样本上表现出的误差的期望,并常常通过测试数据集上的误差来近似。计算训练误差和泛化误差可以使用之前介绍过的损失函数,例如线性回归用到的平方损失函数和softmax回归用到的交叉熵损失函数。让我们以高考为例来直观地解释训练误差和泛化误转载 2020-07-07 10:16:49 · 317 阅读 · 0 评论 -
[pytorch、学习] - 3.10 多重感知机的简洁实现
参考3.10. 多重感知机的简洁实现import torchfrom torch import nnfrom torch.nn import initimport numpy as npimport syssys.path.append("..") import d2lzh_pytorch as d2l3.10.1. 定义模型num_inputs, num_outputs, num_hiddens = 784, 10, 256# 参数都存在 net.parameters()中net转载 2020-07-07 10:09:40 · 248 阅读 · 0 评论 -
[pytorch、学习] - 3.9 多重感知机的从零开始实现
参考3.9 多重感知机的从零开始实现import torchimport numpy as npimport syssys.path.append("..")import d2lzh_pytorch as d2l3.9.1. 获取和读取数据batch_size = 256train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size)3.9.2. 定义模型参数num_inputs, num_outputs, num_hi转载 2020-07-06 10:02:11 · 347 阅读 · 0 评论 -
[pytorch、学习] - 3.7 softmax回归的简洁实现
参考3.7. softmax回归的简洁实现使用pytorch实现softmaximport torchfrom torch import nnfrom torch.nn import initimport numpy as npimport syssys.path.append("..")import d2lzh_pytorch as d2l3.7.1. 获取和读取数据batch_size = 256train_iter, test_iter = d2l.load_data_fas转载 2020-07-06 09:54:34 · 351 阅读 · 0 评论 -
[pytorch、学习] - 3.6 softmax回归的从零开始实现
参考3.6 softmax回归的从零开始实现import torchimport torchvisionimport numpy as npimport syssys.path.append("..")import d2lzh_pytorch as d2l3.6.1. 获取和读取数据batch_size = 256train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size)3.6.2. 初始化模型参数num_inp转载 2020-07-06 09:45:56 · 471 阅读 · 0 评论 -
[pytorch、学习] - 3.5 图像分类数据集
参考3.5. 图像分类数据集在介绍shftmax回归的实现前我们先引入一个多类图像分类数据集本章开始使用pytorch实现啦~本节我们将使用torchvision包,它是服务于PyTorch深度学习框架的,主要用来构建计算机视觉模型。torchvision主要由以下几部分构成:torchvision.datasets: 一些加载数据的函数及常用的数据集接口torchvision.models: 包含常用的模型(含预训练模型),例如 AlexNet、VGG、ResNet等torchvisi转载 2020-07-06 09:39:40 · 350 阅读 · 3 评论