Pytorch
文章平均质量分 90
PyTorch动手学深度学习
https://github.com/ShusenTang/Dive-into-DL-PyTorch
给算法爸爸上香
爱学习的图像算法工程师一枚
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
PyTorch动手学深度学习 笔记目录
PyTorch动手学深度学习 目录。原创 2023-01-01 10:46:56 · 1019 阅读 · 0 评论 -
5.5_lenet
5.5 卷积神经网络(LeNet)在3.9节(多层感知机的从零开始实现)里我们构造了一个含单隐藏层的多层感知机模型来对Fashion-MNIST数据集中的图像进行分类。每张图像高和宽均是28像素。我们将图像中的像素逐行展开,得到长度为784的向量,并输入进全连接层中。然而,这种分类方法有一定的局限性。图像在同一列邻近的像素在这个向量中可能相距较远。它们构成的模式可能难以被模型识别。对于大尺寸的输入图像,使用全连接层容易造成模型过大。假设输入是高和宽均为1000像素的彩色照片(含3个通道)。即使全连接原创 2022-06-10 09:32:55 · 200 阅读 · 0 评论 -
9.5_multiscale-object-detection
在9.4节(锚框)中,我们在实验中以输入图像的每个像素为中心生成多个锚框。这些锚框是对输入图像不同区域的采样。然而,如果以图像每个像素为中心都生成锚框,很容易生成过多锚框而造成计算量过大。举个例子,假设输入图像的高和宽分别为561像素和728像素,如果以每个像素为中心生成5个不同形状的锚框,那么一张图像上则需要标注并预测200多万个锚框(561×728×5561 \times 728 \times 5561×728×5)。减少锚框个数并不难。一种简单的方法是在输入图像中均匀采样一小部分像素,并以采样的像素为原创 2022-06-15 09:22:38 · 243 阅读 · 0 评论 -
1_deep-learning-intro
深度学习简介你可能已经接触过编程,并开发过一两款程序。同时你可能读过关于深度学习或者机器学习的铺天盖地的报道,尽管很多时候它们被赋予了更广义的名字:人工智能。实际上,或者说幸运的是,大部分程序并不需要深度学习或者是更广义上的人工智能技术。例如,如果我们要为一台微波炉编写一个用户界面,只需要一点儿工夫我们便能设计出十几个按钮以及一系列能精确描述微波炉在各种情况下的表现的规则。再比如,假设我们要编写一个电子邮件客户端。这样的程序比微波炉要复杂一些,但我们还是可以沉下心来一步一步思考:客户端的用户界面将需要几个原创 2022-06-05 16:16:24 · 361 阅读 · 0 评论 -
3.4_softmax-regression
3.4 softmax回归前几节介绍的线性回归模型适用于输出为连续值的情景。在另一类情景中,模型输出可以是一个像图像类别这样的离散值。对于这样的离散值预测问题,我们可以使用诸如softmax回归在内的分类模型。和线性回归不同,softmax回归的输出单元从一个变成了多个,且引入了softmax运算使输出更适合离散值的预测和训练。本节以softmax回归模型为例,介绍神经网络中的分类模型。3.4.1 分类问题让我们考虑一个简单的图像分类问题,其输入图像的高和宽均为2像素,且色彩为灰度。这样每个像素值都可原创 2022-06-07 09:24:00 · 201 阅读 · 0 评论 -
10.8_sentiment-analysis-cnn
在“卷积神经网络”一章中我们探究了如何使用二维卷积神经网络来处理二维图像数据。在之前的语言模型和文本分类任务中,我们将文本数据看作是只有一个维度的时间序列,并很自然地使用循环神经网络来表征这样的数据。其实,我们也可以将文本当作一维图像,从而可以用一维卷积神经网络来捕捉临近词之间的关联。本节将介绍将卷积神经网络应用到文本分析的开创性工作之一:textCNN [1]。首先导入实验所需的包和模块。10.8.1 一维卷积层在介绍模型前我们先来解释一维卷积层的工作原理。与二维卷积层一样,一维卷积层使用一维的互相关原创 2022-06-16 00:06:27 · 285 阅读 · 0 评论 -
9.4_anchor
目标检测算法通常会在输入图像中采样大量的区域,然后判断这些区域中是否包含我们感兴趣的目标,并调整区域边缘从而更准确地预测目标的真实边界框(ground-truth bounding box)。不同的模型使用的区域采样方法可能不同。这里我们介绍其中的一种方法:它以每个像素为中心生成多个大小和宽高比(aspect ratio)不同的边界框。这些边界框被称为锚框(anchor box)。我们将在后面基于锚框实践目标检测。先导入一下相关包。9.4.1 生成多个锚框假设输入图像高为hhh,宽为www。我们分别以图原创 2022-06-15 09:23:11 · 294 阅读 · 0 评论 -
4.2_parameters
4.2 模型参数的访问、初始化和共享在3.3节(线性回归的简洁实现)中,我们通过init模块来初始化模型的参数。我们也介绍了访问模型参数的简单方法。本节将深入讲解如何访问和初始化模型参数,以及如何在多个层之间共享同一份模型参数。我们先定义一个与上一节中相同的含单隐藏层的多层感知机。我们依然使用默认方式初始化它的参数,并做一次前向计算。与之前不同的是,在这里我们从nn中导入了init模块,它包含了多种模型初始化方法。import torchfrom torch import nnfrom torch原创 2022-06-09 00:12:03 · 237 阅读 · 0 评论 -
9.3_bounding-box
在前面的一些章节中,我们介绍了诸多用于图像分类的模型。在图像分类任务里,我们假设图像里只有一个主体目标,并关注如何识别该目标的类别。然而,很多时候图像里有多个我们感兴趣的目标,我们不仅想知道它们的类别,还想得到它们在图像中的具体位置。在计算机视觉里,我们将这类任务称为目标检测(object detection)或物体检测。目标检测在多个领域中被广泛使用。例如,在无人驾驶里,我们需要通过识别拍摄到的视频图像里的车辆、行人、道路和障碍的位置来规划行进线路。机器人也常通过该任务来检测感兴趣的目标。安防领域则需要检原创 2022-06-15 09:22:20 · 3186 阅读 · 0 评论 -
3.3_linear-regression-pytorch
3.3 线性回归的简洁实现随着深度学习框架的发展,开发深度学习应用变得越来越便利。实践中,我们通常可以用比上一节更简洁的代码来实现同样的模型。在本节中,我们将介绍如何使用PyTorch更方便地实现线性回归的训练。3.3.1 生成数据集我们生成与上一节中相同的数据集。其中features是训练数据特征,labels是标签。num_inputs = 2num_examples = 1000true_w = [2, -3.4]true_b = 4.2features = torch.tensor(原创 2022-06-07 09:23:10 · 193 阅读 · 0 评论 -
3.10_mlp-pytorch
3.10 多层感知机的简洁实现下面我们使用PyTorch来实现上一节中的多层感知机。首先导入所需的包或模块。import torchfrom torch import nnfrom torch.nn import initimport numpy as npimport syssys.path.append("..") import d2lzh_pytorch as d2l3.10.1 定义模型和softmax回归唯一的不同在于,我们多加了一个全连接层作为隐藏层。它的隐藏单元个数为25原创 2022-06-07 09:29:14 · 292 阅读 · 0 评论 -
7.8_adam
7.8 Adam算法Adam算法在RMSProp算法基础上对小批量随机梯度也做了指数加权移动平均 [1]。下面我们来介绍这个算法。所以Adam算法可以看做是RMSProp算法与动量法的结合。7.8.1 算法Adam算法使用了动量变量vt\boldsymbol{v}_tvt和RMSProp算法中小批量随机梯度按元素平方的指数加权移动平均变量st\boldsymbol{s}_tst,并在时间步0将它们中每个元素初始化为0。给定超参数0≤β1<10 \leq \beta_1 < 10≤原创 2022-06-13 00:05:21 · 216 阅读 · 0 评论 -
5.6_alexnet
5.6 深度卷积神经网络(AlexNet)在LeNet提出后的将近20年里,神经网络一度被其他机器学习方法超越,如支持向量机。虽然LeNet可以在早期的小数据集上取得好的成绩,但是在更大的真实数据集上的表现并不尽如人意。一方面,神经网络计算复杂。虽然20世纪90年代也有过一些针对神经网络的加速硬件,但并没有像之后GPU那样大量普及。因此,训练一个多通道、多层和有大量参数的卷积神经网络在当年很难完成。另一方面,当年研究者还没有大量深入研究参数初始化和非凸优化算法等诸多领域,导致复杂的神经网络的训练通常较困难原创 2022-06-10 09:33:23 · 229 阅读 · 0 评论 -
6.2_rnn
6.2 循环神经网络上一节介绍的nnn元语法中,时间步ttt的词wtw_twt基于前面所有词的条件概率只考虑了最近时间步的n−1n-1n−1个词。如果要考虑比t−(n−1)t-(n-1)t−(n−1)更早时间步的词对wtw_twt的可能影响,我们需要增大nnn。但这样模型参数的数量将随之呈指数级增长。本节将介绍循环神经网络。它并非刚性地记忆所有固定长度的序列,而是通过隐藏状态来存储之前时间步的信息。首先我们回忆一下前面介绍过的多层感知机,然后描述如何添加隐藏状态来将它变成循环神经网络。6.2.1原创 2022-06-12 00:06:07 · 183 阅读 · 0 评论 -
3.5_fashion-mnist
3.5 图像分类数据集(Fashion-MNIST)在介绍softmax回归的实现前我们先引入一个多类图像分类数据集。它将在后面的章节中被多次使用,以方便我们观察比较算法之间在模型精度和计算效率上的区别。图像分类数据集中最常用的是手写数字识别数据集MNIST[1]。但大部分模型在MNIST上的分类精度都超过了95%。为了更直观地观察算法之间的差异,我们将使用一个图像内容更加复杂的数据集Fashion-MNIST[2](这个数据集也比较小,只有几十M,没有GPU的电脑也能吃得消)。本节我们将使用torch原创 2022-06-07 09:24:43 · 470 阅读 · 0 评论 -
6.1_lang-model
6.1 语言模型语言模型(language model)是自然语言处理的重要技术。自然语言处理中最常见的数据是文本数据。我们可以把一段自然语言文本看作一段离散的时间序列。假设一段长度为TTT的文本中的词依次为w1,w2,…,wTw_1, w_2, \ldots, w_Tw1,w2,…,wT,那么在离散的时间序列中,wtw_twt(1≤t≤T1 \leq t \leq T1≤t≤T)可看作在时间步(time step)ttt的输出或标签。给定一个长度为TTT的词的序列w1,w2,…,wTw_1, w原创 2022-06-12 00:05:16 · 214 阅读 · 0 评论 -
10.9_seq2seq
我们已经在前两节中表征并变换了不定长的输入序列。但在自然语言处理的很多应用中,输入和输出都可以是不定长序列。以机器翻译为例,输入可以是一段不定长的英语文本序列,输出可以是一段不定长的法语文本序列,例如当输入和输出都是不定长序列时,我们可以使用编码器—解码器(encoder-decoder)[1] 或者seq2seq模型 [2]。这两个模型本质上都用到了两个循环神经网络,分别叫做编码器和解码器。编码器用来分析输入序列,解码器用来生成输出序列。图10.8描述了使用编码器—解码器将上述英语句子翻译成法语句子的一种原创 2022-06-16 00:09:33 · 216 阅读 · 0 评论 -
3.2_linear-regression-scratch
3.2 线性回归的从零开始实现在了解了线性回归的背景知识之后,现在我们可以动手实现它了。尽管强大的深度学习框架可以减少大量重复性工作,但若过于依赖它提供的便利,会导致我们很难深入理解深度学习是如何工作的。因此,本节将介绍如何只利用Tensor和autograd来实现一个线性回归的训练。首先,导入本节中实验所需的包或模块,其中的matplotlib包可用于作图,且设置成嵌入显示。%matplotlib inlineimport torchfrom IPython import displayfro原创 2022-06-07 09:22:33 · 256 阅读 · 0 评论 -
3.12_weight-decay
3.12 权重衰减上一节中我们观察了过拟合现象,即模型的训练误差远小于它在测试集上的误差。虽然增大训练数据集可能会减轻过拟合,但是获取额外的训练数据往往代价高昂。本节介绍应对过拟合问题的常用方法:权重衰减(weight decay)。3.12.1 方法权重衰减等价于 L2L_2L2 范数正则化(regularization)。正则化通过为模型损失函数添加惩罚项使学出的模型参数值较小,是应对过拟合的常用手段。我们先描述L2L_2L2范数正则化,再解释它为何又称权重衰减。L2L_2L2范数正则化在原创 2022-06-08 00:11:40 · 1414 阅读 · 0 评论 -
4.3_deferred-init
4.3 模型参数的延后初始化由于使用Gluon创建的全连接层的时候不需要指定输入个数。所以当调用initialize函数时,由于隐藏层输入个数依然未知,系统也无法得知该层权重参数的形状。只有在当形状已知的输入X传进网络做前向计算net(X)时,系统才推断出该层的权重参数形状为多少,此时才进行真正的初始化操作。但是使用PyTorch在定义模型的时候就要指定输入的形状,所以也就不存在这个问题了,所以本节略。有兴趣的可以去看看原文,传送门。......原创 2022-06-09 00:12:26 · 181 阅读 · 0 评论 -
7.1_optimization-intro
7.1 优化与深度学习本节将讨论优化与深度学习的关系,以及优化在深度学习中的挑战。在一个深度学习问题中,我们通常会预先定义一个损失函数。有了损失函数以后,我们就可以使用优化算法试图将其最小化。在优化中,这样的损失函数通常被称作优化问题的目标函数(objective function)。依据惯例,优化算法通常只考虑最小化目标函数。其实,任何最大化问题都可以很容易地转化为最小化问题,只需令目标函数的相反数为新的目标函数即可。7.1.1 优化与深度学习的关系虽然优化为深度学习提供了最小化损失函数的方法,但本原创 2022-06-13 00:02:17 · 190 阅读 · 0 评论 -
4.5_read-write
4.5 读取和存储到目前为止,我们介绍了如何处理数据以及如何构建、训练和测试深度学习模型。然而在实际中,我们有时需要把训练好的模型部署到很多不同的设备。在这种情况下,我们可以把内存中训练好的模型参数存储在硬盘上供后续读取使用。4.5.1 读写Tensor我们可以直接使用save函数和load函数分别存储和读取Tensor。save使用Python的pickle实用程序将对象进行序列化,然后将序列化的对象保存到disk,使用save可以保存各种对象,包括模型、张量和字典等。而load使用pickle u原创 2022-06-09 00:13:30 · 159 阅读 · 0 评论 -
7.5_adagrad
7.5 AdaGrad算法在之前介绍过的优化算法中,目标函数自变量的每一个元素在相同时间步都使用同一个学习率来自我迭代。举个例子,假设目标函数为fff,自变量为一个二维向量[x1,x2]⊤[x_1, x_2]^\top[x1,x2]⊤,该向量中每一个元素在迭代时都使用相同的学习率。例如,在学习率为η\etaη的梯度下降中,元素x1x_1x1和x2x_2x2都使用相同的学习率η\etaη来自我迭代:x1←x1−η∂f∂x1,x2←x2−η∂f∂x2.x_1 \leftarrow x_1 - \e原创 2022-06-13 00:04:22 · 421 阅读 · 0 评论 -
10.11_attention
在10.9节(编码器—解码器(seq2seq))里,解码器在各个时间步依赖相同的背景变量来获取输入序列信息。当编码器为循环神经网络时,背景变量来自它最终时间步的隐藏状态。现在,让我们再次思考那一节提到的翻译例子:输入为英语序列“They”“are”“watching”“.”,输出为法语序列“Ils”“regardent”“.”。不难想到,解码器在生成输出序列中的每一个词时可能只需利用输入序列某一部分的信息。例如,在输出序列的时间步1,解码器可以主要依赖“They”“are”的信息来生成“Ils”,在时间步2原创 2022-06-17 00:01:09 · 235 阅读 · 0 评论 -
5.3_channels
5.3 多输入通道和多输出通道前面两节里我们用到的输入和输出都是二维数组,但真实数据的维度经常更高。例如,彩色图像在高和宽2个维度外还有RGB(红、绿、蓝)3个颜色通道。假设彩色图像的高和宽分别是hhh和www(像素),那么它可以表示为一个3×h×w3\times h\times w3×h×w的多维数组。我们将大小为3的这一维称为通道(channel)维。本节我们将介绍含多个输入通道或多个输出通道的卷积核。5.3.1 多输入通道当输入数据含多个通道时,我们需要构造一个输入通道数与输入数据的通道数相同的原创 2022-06-10 09:31:40 · 268 阅读 · 0 评论 -
5.1_conv-layer
5.1 二维卷积层卷积神经网络(convolutional neural network)是含有卷积层(convolutional layer)的神经网络。本章中介绍的卷积神经网络均使用最常见的二维卷积层。它有高和宽两个空间维度,常用来处理图像数据。本节中,我们将介绍简单形式的二维卷积层的工作原理。5.1.1 二维互相关运算虽然卷积层得名于卷积(convolution)运算,但我们通常在卷积层中使用更加直观的互相关(cross-correlation)运算。在二维卷积层中,一个二维输入数组和一个二维核原创 2022-06-10 09:29:04 · 322 阅读 · 0 评论 -
6.3_lang-model-dataset
6.3 语言模型数据集(周杰伦专辑歌词)本节将介绍如何预处理一个语言模型数据集,并将其转换成字符级循环神经网络所需要的输入格式。为此,我们收集了周杰伦从第一张专辑《Jay》到第十张专辑《跨时代》中的歌词,并在后面几节里应用循环神经网络来训练一个语言模型。当模型训练好后,我们就可以用这个模型来创作歌词。6.3.1 读取数据集首先读取这个数据集,看看前40个字符是什么样的。import torchimport randomimport zipfilewith zipfile.ZipFile('.原创 2022-06-12 00:06:25 · 212 阅读 · 0 评论 -
10.10_beam-search
上一节介绍了如何训练输入和输出均为不定长序列的编码器—解码器。本节我们介绍如何使用编码器—解码器来预测不定长的序列。上一节里已经提到,在准备训练数据集时,我们通常会在样本的输入序列和输出序列后面分别附上一个特殊符号"“表示序列的终止。我们在接下来的讨论中也将沿用上一节的全部数学符号。为了便于讨论,假设解码器的输出是一段文本序列。设输出文本词典Y\mathcal{Y}Y(包含特殊符号”“)的大小为∣Y∣\left|\mathcal{Y}\right|∣Y∣,输出序列的最大长度为T′T'T′...原创 2022-06-16 00:09:54 · 357 阅读 · 0 评论 -
5.8_nin
5.8 网络中的网络(NiN)前几节介绍的LeNet、AlexNet和VGG在设计上的共同之处是:先以由卷积层构成的模块充分抽取空间特征,再以由全连接层构成的模块来输出分类结果。其中,AlexNet和VGG对LeNet的改进主要在于如何对这两个模块加宽(增加通道数)和加深。本节我们介绍网络中的网络(NiN)[1]。它提出了另外一个思路,即串联多个由卷积层和“全连接”层构成的小网络来构建一个深层网络。5.8.1 NiN块我们知道,卷积层的输入和输出通常是四维数组(样本,通道,高,宽),而全连接层的输入和原创 2022-06-10 09:34:00 · 210 阅读 · 0 评论 -
4.4_custom-layer
4.4 自定义层深度学习的一个魅力在于神经网络中各式各样的层,例如全连接层和后面章节中将要介绍的卷积层、池化层与循环层。虽然PyTorch提供了大量常用的层,但有时候我们依然希望自定义层。本节将介绍如何使用Module来自定义层,从而可以被重复调用。4.4.1 不含模型参数的自定义层我们先介绍如何定义一个不含模型参数的自定义层。事实上,这和4.1节(模型构造)中介绍的使用Module类构造模型类似。下面的CenteredLayer类通过继承Module类自定义了一个将输入减掉均值后输出的层,并将层的计原创 2022-06-09 00:13:14 · 209 阅读 · 0 评论 -
2.3_autograd
2.3 自动求梯度在深度学习中,我们经常需要对函数求梯度(gradient)。PyTorch提供的autograd包能够根据输入和前向传播过程自动构建计算图,并执行反向传播。本节将介绍如何使用autograd包来进行自动求梯度的有关操作。2.3.1 概念上一节介绍的Tensor是这个包的核心类,如果将其属性.requires_grad设置为True,它将开始追踪(track)在其上的所有操作(这样就可以利用链式法则进行梯度传播了)。完成计算后,可以调用.backward()来完成所有梯度计算。此Ten原创 2022-06-06 00:07:09 · 324 阅读 · 0 评论 -
10.12_machine-translation
机器翻译是指将一段文本从一种语言自动翻译到另一种语言。因为一段文本序列在不同语言中的长度不一定相同,所以我们使用机器翻译为例来介绍编码器—解码器和注意力机制的应用。我们先定义一些特殊符号。其中“”(padding)符号用来添加在较短序列后,直到每个序列等长,而“”和“”符号分别表示序列的开始和结束。接着定义两个辅助函数对后面读取的数据进行预处理。为了演示方便,我们在这里使用一个很小的法语—英语数据集。在这个数据集里,每一行是一对法语句子和它对应的英语句子,中间使用隔开。在读...原创 2022-06-17 00:01:31 · 398 阅读 · 0 评论 -
4.6_use-gpu
4.6 GPU计算到目前为止,我们一直在使用CPU计算。对复杂的神经网络和大规模的数据来说,使用CPU来计算可能不够高效。在本节中,我们将介绍如何使用单块NVIDIA GPU来计算。所以需要确保已经安装好了PyTorch GPU版本。准备工作都完成后,下面就可以通过nvidia-smi命令来查看显卡信息了。!nvidia-smi # 对Linux/macOS用户有效输出:Sun Mar 17 14:59:57 2019 +------------------------------原创 2022-06-09 00:13:47 · 343 阅读 · 0 评论 -
3.8_mlp
3.8 多层感知机我们已经介绍了包括线性回归和softmax回归在内的单层神经网络。然而深度学习主要关注多层模型。在本节中,我们将以多层感知机(multilayer perceptron,MLP)为例,介绍多层神经网络的概念。3.8.1 隐藏层多层感知机在单层神经网络的基础上引入了一到多个隐藏层(hidden layer)。隐藏层位于输入层和输出层之间。图3.3展示了一个多层感知机的神经网络图,它含有一个隐藏层,该层中有5个隐藏单元。 图3.3 带有隐藏层的多层感知机在图3.3所示的多层感知原创 2022-06-07 09:28:26 · 775 阅读 · 0 评论 -
2.1_install
2.1 环境配置本节简单介绍一些必要的软件的安装与配置,由于不同机器软硬件配置不同,所以不详述,遇到问题请善用Google。2.1.1 AnacondaAnaconda是Python的一个开源发行版本,主要面向科学计算。我们可以简单理解为,Anaconda是一个预装了很多我们用的到或用不到的第三方库的Python。而且相比于大家熟悉的pip install命令,Anaconda中增加了conda install命令。当你熟悉了Anaconda以后会发现,conda install会比pip insta原创 2022-06-06 00:05:35 · 206 阅读 · 0 评论 -
5.2_padding-and-strides
5.2 填充和步幅在上一节的例子里,我们使用高和宽为3的输入与高和宽为2的卷积核得到高和宽为2的输出。一般来说,假设输入形状是nh×nwn_h\times n_wnh×nw,卷积核窗口形状是kh×kwk_h\times k_wkh×kw,那么输出形状将会是(nh−kh+1)×(nw−kw+1).(n_h-k_h+1) \times (n_w-k_w+1).(nh−kh+1)×(nw−kw+1).所以卷积层的输出形状由输入形状和卷积核窗口形状决定。本节我们将介绍卷积层的两个超参数,即填充原创 2022-06-10 09:31:14 · 202 阅读 · 0 评论 -
3.1_linear-regression
3.1 线性回归线性回归输出是一个连续值,因此适用于回归问题。回归问题在实际中很常见,如预测房屋价格、气温、销售额等连续值的问题。与回归问题不同,分类问题中模型的最终输出是一个离散值。我们所说的图像分类、垃圾邮件识别、疾病检测等输出为离散值的问题都属于分类问题的范畴。softmax回归则适用于分类问题。由于线性回归和softmax回归都是单层神经网络,它们涉及的概念和技术同样适用于大多数的深度学习模型。我们首先以线性回归为例,介绍大多数深度学习模型的基本要素和表示方法。3.1.1 线性回归的基本要素原创 2022-06-07 09:22:01 · 206 阅读 · 0 评论 -
8.2_async-computation
8.2 异步计算此节内容对应PyTorch的版本本人没怎么用过,网上参考资料也比较少,所以略:),有兴趣的可以去看看原文。关于PyTorch的异步执行我只在官方文档找到了一段:By default, GPU operations are asynchronous. When you call a function that uses the GPU, the operations are enqueued to the particular device, but not necessarily e原创 2022-06-14 10:49:44 · 186 阅读 · 0 评论 -
9.1_image-augmentation
在5.6节(深度卷积神经网络)里我们提到过,大规模数据集是成功应用深度神经网络的前提。图像增广(image augmentation)技术通过对训练图像做一系列随机改变,来产生相似但又不同的训练样本,从而扩大训练数据集的规模。图像增广的另一种解释是,随机改变训练样本可以降低模型对某些属性的依赖,从而提高模型的泛化能力。例如,我们可以对图像进行不同方式的裁剪,使感兴趣的物体出现在不同位置,从而减轻模型对物体出现位置的依赖性。我们也可以调整亮度、色彩等因素来降低模型对色彩的敏感度。可以说,在当年AlexNet的原创 2022-06-15 09:21:43 · 5022 阅读 · 0 评论 -
8.3_auto-parallelism
8.3 自动并行计算上一节提到,默认情况下,GPU 操作是异步的。当调用一个使用 GPU 的函数时,这些操作会在特定的设备上排队,但不一定会在稍后执行。这允许我们并行更多的计算,包括 CPU 或其他 GPU 上的操作。下面看一个简单的例子。首先导入本节中实验所需的包或模块。注意,需要至少2块GPU才能运行本节实验。import torchimport timeassert torch.cuda.device_count() >= 2我们先实现一个简单的计时类。class Bench原创 2022-06-14 10:50:00 · 216 阅读 · 0 评论
分享