dive_into_deep_learning
文章平均质量分 73
dive_into_deep_learning
nsq_ai
这个作者很懒,什么都没留下…
展开
-
12.7. 参数服务器
通过细节可以知道,一方面是不同的互连方式的带宽存在极大的区别(例如,NVLink可以通过设置实现跨条链路的高达100GB/s的带宽,16通道的PCIe4.0提供32GB/s的带宽,而即使是高速100GbE以太网也只能提供大约10GB/s的带宽);当我们从一个GPU迁移到多个GPU时,以及再迁移到包含多个GPU的多个服务器时(可能所有服务器的分布跨越了多个机架和多个网络交换机),分布式并行训练算法也需要变得更加复杂。同步需要高度适应特定的网络基础设施和服务器内的连接,这种适应会严重影响同步所需的时间。原创 2022-10-14 20:38:07 · 139 阅读 · 0 评论 -
12.6. 多GPU的简洁实现
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-91Bo8qL6-1665751027914)(https://zh.d2l.ai/_images/output_multiple-gpus-concise_2e111f_59_1.svg)]除了需要拆分和聚合数据外,训练代码与前几章的实现非常相似。每台设备上的网络需要先初始化,然后再尝试访问该设备上的参数,否则会遇到错误。神经网络可以在(可找到数据的)单GPU上进行自动评估。在数据集上迭代时,要将小批量数据分配到所有设备上。原创 2022-10-14 20:37:31 · 624 阅读 · 0 评论 -
12.5. 多GPU训练
对于高效的多GPU训练,我们需要两个基本操作。而且数据集也太小了,在这个数据集中,我们实现的多GPU训练的简单方法受到了巨大的Python开销的影响。在数据并行中,数据需要跨多个GPU拆分,其中每个GPU执行自己的前向传播和反向传播,随后所有的梯度被聚合为一,之后聚合结果向所有的GPU广播。总体而言,只要GPU的显存足够大,数据并行是最方便的。在任何一次训练迭代中,给定的随机的小批量样本都将被分成个部分,并均匀地分配到GPU上。数据并行训练本身是不复杂的,它通过增加有效的小批量数据量的大小提高了训练效率。原创 2022-10-14 20:36:53 · 1494 阅读 · 0 评论 -
12.4. 硬件
PCIe,一种专用总线,用于每个通道点到点连接的高带宽需求(在通道插槽中的PCIe4.0上高达32GB/s),延迟时间为个位数的微秒(5μs)。它们由许多关键组件组成:处理器核心(processor cores)用于执行机器代码的、总线(bus)用于连接不同组件(注意,总线会因为处理器型号、各代产品和供应商之间的特定拓扑结构有明显不同)和缓存(cach)相比主内存实现更高的读取带宽和更低的延迟内存访问。交换机,一种连接多个设备的方式,该连接方式下的任何一对设备都可以同时执行(通常是全带宽)点对点连接。原创 2022-10-14 20:35:28 · 372 阅读 · 0 评论 -
12.3. 自动并行
让我们从定义一个具有参考性的用于测试的工作负载开始:下面的run函数将执行 10次“矩阵-矩阵”乘法时需要使用的数据分配到两个变量(x_gpu1和x_gpu2)中,这两个变量分别位于我们选择的不同设备上。在上述情况下,总执行时间小于两个部分执行时间的总和,因为深度学习框架自动调度两个GPU设备上的计算,而不需要用户编写复杂的代码。在许多情况下,我们需要在不同的设备之间移动数据,比如在CPU和GPU之间,或者在不同的GPU之间。在一个CPU和两个GPU上的两层的多层感知机的计算图及其依赖关系。原创 2022-10-13 15:48:57 · 340 阅读 · 0 评论 -
12.2. 异步计算
符号式编程更容易在编译期间优化代码,同时还能够将程序移植到与Python无关的格式中,从而允许程序在非Python环境中运行,避免了任何潜在的与Python解释器相关的性能问题。在Python中,命令式编程的大部分代码都是简单易懂的。我们编写与之前相同的代码,再使用torch.jit.script简单地转换模型,当完成这些任务后,网络就将得到优化(我们将在下面对性能进行基准测试)为了能够利用符号式编程的可移植性和效率,开发人员思考能否将这两种编程模型的优点结合起来,于是就产生了torchscript。原创 2022-10-11 10:36:04 · 490 阅读 · 0 评论 -
10.7. Transformer
transformer的编码器和解码器是基于自注意力的模块叠加而成的,源(输入)序列和目标(输出)序列的嵌入(embedding)表示将加上位置编码(positional encoding),再分别输入到编码器和解码器中。值得注意的是,解码器的自注意力权重和“编码器-解码器”的注意力权重都有相同的查询:即以序列开始词元(beginning-of-sequence,BOS)打头,再与后续输出的词元共同组成序列。为了可视化解码器的自注意力权重和“编码器-解码器”的注意力权重,我们需要完成更多的数据操作工作。原创 2022-10-11 10:35:01 · 3589 阅读 · 0 评论 -
10.6. 自注意力和位置编码
在二进制表示中,较高比特位的交替频率低于较低比特位, 与下面的热图所示相似,只是位置编码通过使用三角函数在编码维度上降低频率。为了使用序列的顺序信息,我们通过在输入表示中添加 位置编码(positional encoding)来注入绝对的或相对的位置信息。比较下面几个架构,目标都是将由个词元组成的序列映射到另一个长度相等的序列,其中的每个输入词元或输出词元都由d维向量表示。为了使用序列的顺序信息,我们可以通过在输入表示中添加位置编码,来注入绝对的或相对的位置信息。原创 2022-10-11 10:33:12 · 528 阅读 · 0 评论 -
10.4. Bahdanau 注意力
如何定义Bahdanau注意力,实现循环神经网络编码器-解码器。其实,我们只需重新定义解码器即可。为了更方便地显示学习的注意力权重, 以下AttentionDecoder类定义了带有注意力机制解码器的基本接口。#@save"""带有注意力机制解码器的基本接口"""@property接下来,让我们在接下来的Seq2SeqAttentionDecoder类中 实现带有Bahdanau注意力的循环神经网络解码器。原创 2022-10-11 10:31:35 · 711 阅读 · 0 评论 -
10.3. 注意力评分函数
注意力评分函数(attention scoring function), 简称评分函数(scoring function), 把这个函数的输出结果输入到softmax函数中进行运算。在下面的masked_softmax函数中 实现这样的掩蔽softmax操作(masked softmax operation), 其中任何超出有效长度的位置都被掩蔽并置为0。一般来说,当查询和键是不同长度的矢量时, 我们可以使用加性注意力作为评分函数.在下面的缩放点积注意力的实现中,我们使用了暂退法进行模型正则化。原创 2022-10-11 10:30:04 · 290 阅读 · 0 评论 -
10.2. 注意力汇聚:Nadaraya-Watson 核回归
带参数的注意力汇聚,使用小批量矩阵乘法, 定义Nadaraya-Watson核回归的带参数版本为# queries和attention_weights的形状为(查询个数,“键-值”对个数)# values的形状为(查询个数,“键-值”对个数)原创 2022-10-11 10:28:53 · 1500 阅读 · 0 评论 -
10.1. 注意力提示
实际上,注意力汇聚得到的是加权平均的总和值, 其中权重是在给定的查询和不同的键之间计算得出的。自主性的与非自主性的注意力提示解释了人类的注意力的方式, 下面我们看看如何通过这两种注意力提示, 用神经网络来设计注意力机制的框架.以设计注意力汇聚, 以便给定的查询(自主性提示)可以与键(非自主性提示)进行匹配, 这将引导得出最匹配的值(感官输入)。注意力机制通过注意力汇聚将查询(自主性提示)和键(非自主性提示)结合在一起,实现对值(感官输入)的选择倾向。人类的注意力是有限的、有价值和稀缺的资源。原创 2022-10-11 10:27:05 · 128 阅读 · 0 评论 -
09.8. 束搜索
束搜索(beam search)是贪心搜索的一个改进版本。在随后的每个时间步,基于上一时间步的k个候选输出序列, 我们将继续从k个可能的选择中 挑出具有最高条件概率的k个候选输出序列。穷举搜索(exhaustive search): 穷举地列举所有可能的输出序列及其条件概率, 然后计算输出条件概率最高的一个。贪心搜索所选取序列的计算量最小,但精度相对较低。束搜索过程(束宽:2,输出序列的最大长度:3)序列搜索策略包括贪心搜索、穷举搜索和束搜索。穷举搜索所选取序列的精度最高,但计算量最大。原创 2022-10-11 10:24:12 · 295 阅读 · 0 评论 -
09.7. 序列到序列学习(seq2seq)
在完成所有时间步后, 最后一层的隐状态的输出是一个张量(output由编码器的循环层返回), 其形状为(时间步数,批量大小,隐藏单元数)。特定的序列开始词元(“”)和 原始的输出序列(不包括序列结束词元“”) 拼接在一起作为解码器的输入。为了进一步包含经过编码的输入序列的信息, 上下文变量在所有的时间步与解码器的输入进行拼接(concatenate)。为了连续生成输出序列的词元, 独立的循环神经网络解码器是基于输入序列的编码信息 和输出序列已经看见的或者生成的词元来预测下一个词元。实现循环神经网络编码器。原创 2022-10-11 10:21:15 · 1570 阅读 · 0 评论 -
09.6. 编码器-解码器架构
为了逐个地生成长度可变的词元序列, 解码器在每个时间步都会将输入 (例如:在前一时间步生成的词元)和编码后的状态 映射成当前时间步的输出词元。在下面的解码器接口中,我们新增一个init_state函数, 用于将编码器的输出(enc_outputs)转换为编码后的状态。在编码器接口中,我们只指定长度可变的序列作为编码器的输入X。总而言之,“编码器-解码器”架构包含了一个编码器和一个解码器, 并且还拥有可选的额外的参数。在前向传播中,编码器的输出用于生成编码状态, 这个状态又被解码器作为其输入的一部分。原创 2022-10-10 10:08:38 · 546 阅读 · 0 评论 -
09.5. 机器翻译与数据集
假设同一个小批量中的每个序列都应该具有相同的长度num_steps, 那么如果文本序列的词元数目少于num_steps时, 我们将继续在其末尾添加特定的“”词元, 直到其长度达到num_steps;下载一个由Tatoeba项目的双语句子对 组成的“英-法”数据集,数据集中的每一行都是制表符分隔的文本序列对, 序列对由英文文本序列和翻译后的法语文本序列组成。除此之外,我们还指定了额外的特定词元, 例如在小批量时用于将序列填充到相同长度的填充词元(“”), 以及序列的开始词元(“”)和结束词元(“”)。原创 2022-10-10 10:05:23 · 727 阅读 · 0 评论 -
09.4. 双向循环神经网络
对于任意时间步,给定一个小批量的输入数据 (样本数,每个示例中的输入数), 隐藏层激活函数、两个方向可以拥有不同数量的隐藏单元。原创 2022-10-10 10:03:29 · 225 阅读 · 0 评论 -
09.3. 深度循环神经网络
有许多不同风格的深度循环神经网络, 如长短期记忆网络、门控循环单元、或经典循环神经网络。另外,用门控循环单元或长短期记忆网络的隐状态 来代替隐状态进行计算, 可以很容易地得到深度门控循环神经网络或深度长短期记忆神经网络。一个具有个隐藏层的深度循环神经网络, 每个隐状态都连续地传递到当前层的下一个时间步和下一层的当前时间步。总体而言,深度循环神经网络需要大量的调参(如学习率和修剪) 来确保合适的收敛,模型的初始化也需要谨慎。在深度循环神经网络中,隐状态的信息被传递到当前层的下一时间步和下一层的当前时间步。原创 2022-10-10 09:58:56 · 246 阅读 · 0 评论 -
09.2. 长短期记忆网络(LSTM)
我们还需要一种机制来重置单元的内容,由遗忘门(forget gate)来管理, 这种设计的动机与门控循环单元相同, 能够通过专用机制决定什么时候记忆或忽略隐状态中的输入。由三个具有sigmoid激活函数的全连接层处理, 以计算输入门、遗忘门和输出门的值。因此,这三个门的值都在的(0,1)范围内。其中一个门用来从单元中输出条目,我们将其称为输出门(output gate)。长短期记忆网络引入了记忆元(memory cell),或简称为单元(cell)。长短期记忆网络有三种类型的门:输入门、遗忘门和输出门。原创 2022-10-10 09:57:09 · 2138 阅读 · 1 评论 -
09.1. 门控循环单元(GRU)
定义隐状态的初始化函数init_gru_state#原创 2022-10-10 09:55:08 · 1172 阅读 · 0 评论 -
08.7. 通过时间反向传播
上图表示具有三个时间步的循环神经网络模型依赖关系的计算图。这样的计算非常缓慢,并且可能会发生梯度爆炸, 因为初始条件的微小变化就可能会对结果产生巨大的影响。为了在循环神经网络的计算过程中可视化模型变量和参数之间的依赖关系, 我们可以为模型绘制一个计算图,矩阵的高次幂可能导致神经网络特征值的发散或消失,将以梯度爆炸或梯度消失的形式表现。比较RNN中计算梯度的策略,3行自上而下分别为:随机截断、常规截断、完整计算。截断包括:规则截断和随机截断。为了计算的效率,“通过时间反向传播”在计算期间会缓存中间值。原创 2022-10-10 09:52:13 · 344 阅读 · 0 评论 -
08.6. 循环神经网络的简洁实现
使用张量来初始化隐状态,它的形状是(隐藏层数,批量大小,隐藏单元数)。#result# 通过一个隐状态和一个输入,我们就可以用更新后的隐状态计算输出。# result# 定义了一个RNNModel类#@save"""循环神经网络模型"""# 如果RNN是双向的(之后将介绍),num_directions应该是2,否则应该是1else:# 全连接层首先将Y的形状改为(时间步数*批量大小,隐藏单元数)# 它的输出形状是(时间步数*批量大小,词表大小)。# nn.GRU以张量作为隐状态。原创 2022-10-10 09:49:03 · 224 阅读 · 0 评论 -
08.5. 循环神经网络的从零开始实现
可以看到输出形状是(时间步数X批量大小,词表大小), 而隐状态形状保持不变,即(批量大小,隐藏单元数)。首先定义预测函数来生成prefix之后的新字符, 其中的prefix是一个用户提供的包含多个字符的字符串。我们可以训练一个基于循环神经网络的字符级语言模型,根据用户提供的文本的前缀生成后续文本。在进行任何预测之前,模型通过预热期进行自我更新(例如,获得比初始值更好的隐状态)。这个函数的返回是一个张量,张量全用0填充, 形状为(批量大小,隐藏单元数)因此,它们具有相同的维度,即词表的大小。原创 2022-10-10 09:48:12 · 228 阅读 · 0 评论 -
08.4. 循环神经网络
在训练过程中,我们对每个时间步的输出层的输出进行softmax操作, 然后利用交叉熵损失计算模型输出和标签之间的误差。当前时间步隐藏变量由当前时间步的输入 与前一个时间步的隐藏变量一起计算得出。当前时间步隐藏变量由当前时间步的输入 与前一个时间步一起计算得出。对隐状态使用循环计算的神经网络称为循环神经网络(RNN)。循环神经网络的隐状态可以捕获直到当前时间步序列的历史信息。循环神经网络模型的参数数量不会随着时间步的增加而增加。隐藏层和隐状态指的是两个截然不同的概念。具有隐状态的循环神经网络图示。原创 2022-10-10 09:46:19 · 384 阅读 · 0 评论 -
08.3. 语言模型和数据集
读取长序列的主要方式是随机采样和顺序分区。在迭代过程中,后者可以保证来自两个相邻的小批量中的子序列在原始序列上也是相邻的。假设我们将使用神经网络来训练语言模型,模型中的网络一次处理具有预定义长度(例如个时间步)的一个小批量序列。保证两个相邻的小批量中的子序列在原始序列上也是相邻的,基于小批量的迭代过程中保留了拆分的子序列的顺序.在给定这样的文本序列时,语言模型(language model)的目标是估计序列的联合概率.如果我们只选择一个偏移量, 那么用于训练网络的、所有可能的子序列的覆盖范围将是有限的.原创 2022-10-09 10:13:54 · 1217 阅读 · 3 评论 -
08.2. 文本预处理
时光机器数据集中的每个文本行不一定是一个句子或一个段落,还可能是一个单词,因此返回的corpus仅处理为单个列表,而不是使用多词元列表构成的一个列表。为了对文本进行预处理,我们通常将文本拆分为词元,构建词表将词元字符串映射为数字索引,并将文本数据转换为词元索引以供模型操作。现在,让我们构建一个字典,通常也叫做词表(vocabulary), 用来将字符串类型的词元映射到从开始的数字索引中。我们先将训练集中的所有文档合并在一起,对它们的唯一词元进行统计, 得到的统计结果称之为语料(corpus)。原创 2022-10-09 10:12:22 · 113 阅读 · 0 评论 -
08.1. 序列模型
因此,对于你所拥有的序列数据,在训练时始终要尊重其时间顺序,即最好不要基于未来的数据进行训练。对于直到时间步的观测序列,其在时间步的预测输出是“步预测”。随着我们对预测时间值的增加,会造成误差的快速累积和预测质量的极速下降。输入数据的数量这个数字将会随着我们遇到的数据量的增加而增加, 因此需要一个近似方法来使这个计算变得容易处理。序列模型的估计需要专门的统计工具,两种较流行的选择是自回归模型和隐变量自回归模型。以上例子清楚地说明了当我们试图预测更远的未来时,预测的质量是如何变化的。未来的事件不能影响过去。原创 2022-10-09 10:11:01 · 459 阅读 · 0 评论 -
07.7. 稠密连接网络(DenseNet)
在跨层连接上,不同于ResNet中将输入与输出相加,稠密连接网络(DenseNet)在通道维上连结输入与输出。DenseNet这个名字由变量之间的“稠密连接”而得来,最后一层与之前的所有层紧密相连。稠密网络主要由2部分构成:稠密块(dense block)和过渡层(transition layer)。在构建DenseNet时,我们需要通过添加过渡层来控制网络的维数,从而再次减少通道的数量。稠密连接网络(DenseNet)在某种程度上是ResNet的逻辑扩展。DenseNet的主要构建模块是稠密块和过渡层。原创 2022-10-09 10:02:54 · 597 阅读 · 0 评论 -
07.6. 残差网络(ResNet)
ResNet的前两层跟之前介绍的GoogLeNet中的一样, 不同之处在于ResNet每个卷积层后增加了批量规范化层。通过配置不同的通道数和模块里的残差块数可以得到不同的ResNet模型,例如更深的含152层的ResNet-152。于是,残差块(residual blocks)便诞生了,这个设计对如何建立深层神经网络产生了深远的影响。它在2015年的ImageNet图像识别挑战赛夺魁,并深刻影响了后来的深度神经网络的设计。在训练ResNet之前,让我们观察一下ResNet中不同模块的输入形状是如何变化的。原创 2022-10-09 09:56:42 · 846 阅读 · 0 评论 -
07.5. 批量规范化
回想一下,批量规范化是在卷积层或全连接层之后、相应的激活函数之前应用的。然后,我们将此功能集成到一个自定义层中,其代码主要处理数据移动到训练设备(如GPU)、分配和初始化任何必需的变量、跟踪移动平均线(此处为均值和方差)等问题。在模型训练过程中,批量规范化利用小批量的均值和标准差,不断调整神经网络的中间输出,使整个神经网络各层的中间输出值更加稳定。另外,批量规范化层在”训练模式“(通过小批量统计数据规范化)和“预测模式”(通过数据集统计规范化)中的功能不同。全连接层和卷积层,他们的批量规范化实现略有不同。原创 2022-10-09 09:54:38 · 855 阅读 · 0 评论 -
07.4. 含并行连结的网络(GoogLeNet)
这四条路径都使用合适的填充来使输入与输出的高和宽一致,最后我们将每条线路的输出在通道维度上连结,并构成Inception块的输出。首先我们考虑一下滤波器(filter)的组合,它们可以用各种滤波器尺寸探索图像,这意味着不同大小的滤波器可以有效地识别不同范围的图像细节。其中Inception块的通道数分配之比是在ImageNet数据集上通过大量的实验得来的。在本节中,我们将介绍一个稍微简化的GoogLeNet版本:我们省略了一些为稳定训练而添加的特殊特性,现在有了更好的训练方法,这些特性不是必要的。原创 2022-10-09 09:52:45 · 295 阅读 · 0 评论 -
07.3. 网络中的网络(NiN)
NiN去除了容易造成过拟合的全连接层,将它们替换为全局平均汇聚层(即在所有位置上进行求和)。该汇聚层通道数量为所需的输出数量(例如,Fashion-MNIST的输出为10)。NiN设计的一个优点是,它显著减少了模型所需参数的数量。NiN使用由一个卷积层和多个卷积层组成的块。网络中的网络(NiN)提供了一个非常简单的解决方案:在每个像素的通道上分别使用多层感知机。NiN的想法是在每个像素位置(针对每个高度和宽度)应用一个全连接层。NiN使用一个NiN块,其输出通道数等于标签类别的数量。原创 2022-10-09 09:50:06 · 672 阅读 · 0 评论 -
07.2. 使用块的网络(VGG)
使用块的想法首先出现在牛津大学的视觉几何组(visualgeometry group)的VGG网络中。不同的VGG模型可通过每个块中卷积层数量和输出通道数量的差异来定义。原始VGG网络有5个卷积块,其中前两个块各有一个卷积层,后三个块各包含两个卷积层。一个VGG块与之类似,由一系列卷积层组成,后面再加上用于空间下采样的最大汇聚层。在下面的代码中,我们定义了一个名为vgg_block的函数来实现一个VGG块。开始从单个神经元的角度思考问题,发展到整个层,现在又转向块,重复层的模式。原创 2022-10-09 09:48:26 · 159 阅读 · 0 评论 -
07.1. 深度卷积神经网络(AlexNet)
通过标准的特征提取算法,如SIFT(尺度不变特征变换)和SURF(加速鲁棒特征)或其他手动调整的流水线来输入数据。AlexNet的架构与LeNet相似,但使用了更多的卷积层和更多的参数来拟合大规模的ImageNet数据集。网络中的网络(NiN)。AlexNet的更高层建立在这些底层表示的基础上,以表示更大的特征,如眼睛、鼻子、草叶等等。使用更小的学习速率训练,这是因为网络更深更广、图像分辨率更高,训练卷积神经网络就更昂贵。今天,AlexNet已经被更有效的架构所超越,但它是从浅层网络到深层网络的关键一步。原创 2022-10-09 09:45:02 · 334 阅读 · 0 评论 -
06.6. 卷积神经网络(LeNet)
这个模型是由AT&T贝尔实验室的研究员Yann LeCun在1989年提出的(并以其命名),目的是识别图像 [LeCun et al., 1998]中的手写数字。为了构造高性能的卷积神经网络,我们通常对卷积层进行排列,逐渐降低其表示的空间分辨率,同时增加通道数。LeNet,它是最早发布的卷积神经网络之一,因其在计算机视觉任务中的高效性能而受到广泛关注。在传统的卷积神经网络中,卷积块编码得到的表征在输出之前需由一个或多个全连接层进行处理。同时,用卷积层代替全连接层的另一个好处是:模型更简洁、所需的参数更少。原创 2022-09-22 08:35:04 · 916 阅读 · 0 评论 -
06.5. 汇聚层
与卷积层类似,汇聚层运算符由一个固定形状的窗口组成,该窗口根据其步幅大小在输入的所有区域上滑动,为固定形状窗口(有时称为汇聚窗口)遍历的每个位置计算一个输出。在这两种情况下,与互相关运算符一样,汇聚窗口从输入张量的左上角开始,从左往右、从上往下的在输入张量内滑动。对于给定输入元素,最大汇聚层会输出该窗口内的最大值,平均汇聚层会输出该窗口内的平均值。下面,我们用深度学习框架中内置的二维最大汇聚层,来演示汇聚层中填充和步幅的使用。在汇聚窗口到达的每个位置,它计算该窗口中输入子张量的最大值或平均值。原创 2022-09-21 23:30:59 · 1329 阅读 · 0 评论 -
06.4. 多输入多输出通道
当我们添加通道时,我们的输入和隐藏的表示都变成了三维张量。为使用了最小窗口, 1 X 1卷积失去了卷积层的特有能力——在高度和宽度维度上,识别相邻元素间相互作用的能力。互相关计算使用了具有3个输入通道和2个输出通道的 1 X 1 卷积核。当输入包含多个通道时,需要构造一个与输入数据具有相同输入通道数的卷积核,以便与输入数据进行互相关运算。现在的输出包含个通道,第一个通道的结果与先前输入张量X和多输入单输出通道的结果一致。构造与 图中的值相对应的输入张量X和核张量K,以验证互相关运算的输出。原创 2022-09-21 23:29:44 · 492 阅读 · 0 评论 -
06.3. 填充和步幅
选择奇数的好处是,保持空间维度的同时,我们可以在顶部和底部填充相同数量的行,在左侧和右侧填充相同数量的列。当卷积核的高度和宽度不同时,我们可以填充不同的高度和宽度,使输出和输入具有相同的高度和宽度。在如下示例中,我们使用高度为5,宽度为3的卷积核,高度和宽度两边的填充分别为2和1。步幅可以减小输出的高和宽,例如输出的高和宽仅为输入的高和宽的(是一个大于的整数)。下面,我们将高度和宽度的步幅设置为2,从而将输入的高度和宽度减半。给定高度和宽度为8的输入,则输出的高度和宽度也是8。原创 2022-09-21 23:26:31 · 333 阅读 · 0 评论 -
06.2. 图像卷积
当卷积窗口滑动到新一个位置时,包含在该窗口中的部分张量与卷积核张量进行按元素相乘,得到的张量再求和得到一个单一的标量值,由此我们得出了这一位置的输出张量值。如下所示,输出Y中的1代表从白色到黑色的边缘,-1代表从黑色到白色的边缘,其他情况的输出为0。严格来说,卷积层是个错误的叫法,因为它所表达的运算其实是互相关运算(cross-correlation),而不是卷积运算.现在我们将输入的二维图像转置,再进行如上的互相关运算。接下来,在每次迭代中,我们比较Y与卷积层输出的平方误差,然后计算梯度来更新卷积核。原创 2022-09-21 23:25:30 · 141 阅读 · 0 评论 -
06.1. 从全连接层到卷积
局部性(locality):神经网络的前面几层应该只探索输入图像中的局部区域,而不过度在意图像中相隔较远区域的关系,这就是“局部性”原则。不管检测对象出现在图像中的哪个位置,神经网络的前面几层应该对相同的图像区域具有相似的反应,即为“平移不变性”。对于表格数据,我们寻找的模式可能涉及特征之间的交互,但是我们不能预先假设任何与特征交互相关的先验结构。此时,多层感知机可能是最好的选择,然而对于高维感知数据,这种缺少结构的网络可能会变得不实用。图像的平移不变性使我们以相同的方式处理局部图像,而不在乎它的位置。原创 2022-09-21 23:25:00 · 118 阅读 · 0 评论