wordpress 建站完整视频教程,如何做网站关键词,宁波网站建设公司信息查询,怎么用腾讯云主机建设网站为了能够应用softmax回归和多层感知机#xff0c;我们首先将每个大小为\(28\times28\)的图像展平为一个784维的固定长度的一维向量#xff0c;然后用全连接层对其进行处理。 而现在#xff0c;我们已经掌握了卷积层的处理方法#xff0c;我们可以在图像中保留空间结构。 同…为了能够应用softmax回归和多层感知机我们首先将每个大小为\(28\times28\)的图像展平为一个784维的固定长度的一维向量然后用全连接层对其进行处理。 而现在我们已经掌握了卷积层的处理方法我们可以在图像中保留空间结构。 同时用卷积层代替全连接层的另一个好处是模型更简洁、所需的参数更少。
LeNet它是最早发布的卷积神经网络之一因其在计算机视觉任务中的高效性能而受到广泛关注。 这个模型是由ATT贝尔实验室的研究员Yann LeCun在1989年提出的并以其命名目的是识别图像LeCun et al., 1998中的手写数字。 当时Yann LeCun发表了第一篇通过反向传播成功训练卷积神经网络的研究这项工作代表了十多年来神经网络研究开发的成果。
当时LeNet取得了与支持向量机support vector machines性能相媲美的成果成为监督学习的主流方法。 LeNet被广泛用于自动取款机ATM机中帮助识别处理支票的数字。 时至今日一些自动取款机仍在运行Yann LeCun和他的同事Leon Bottou在上世纪90年代写的代码呢
LeNet
总体来看LeNetLeNet-5由两个部分组成 卷积编码器由两个卷积层组成; 全连接层密集块由三个全连接层组成。
该架构如图所示 LeNet中的数据流。输入是手写数字输出为10种可能结果的概率。
每个卷积块中的基本单元是一个卷积层、一个sigmoid激活函数和平均汇聚层。请注意虽然ReLU和最大汇聚层更有效但它们在20世纪90年代还没有出现。每个卷积层使用\(5\times 5\)卷积核和一个sigmoid激活函数。这些层将输入映射到多个二维特征输出通常同时增加通道的数量。第一卷积层有6个输出通道而第二个卷积层有16个输出通道。每个\(2\times2\)池操作步幅2通过空间下采样将维数减少4倍。卷积的输出形状由批量大小、通道数、高度、宽度决定。
为了将卷积块的输出传递给稠密块我们必须在小批量中展平每个样本。换言之我们将这个四维输入转换成全连接层所期望的二维输入。这里的二维表示的第一个维度索引小批量中的样本第二个维度给出每个样本的平面向量表示。LeNet的稠密块有三个全连接层分别有120、84和10个输出。因为我们在执行分类任务所以输出层的10维对应于最后输出结果的数量。
通过下面的LeNet代码可以看出用深度学习框架实现此类模型非常简单。我们只需要实例化一个Sequential块并将需要的层连接在一起。
import torch
from torch import nn
from d2l import torch as d2lnet nn.Sequential(nn.Conv2d(1, 6, kernel_size5, padding2), nn.Sigmoid(),nn.AvgPool2d(kernel_size2, stride2),nn.Conv2d(6, 16, kernel_size5), nn.Sigmoid(),nn.AvgPool2d(kernel_size2, stride2),nn.Flatten(),nn.Linear(16 * 5 * 5, 120), nn.Sigmoid(),nn.Linear(120, 84), nn.Sigmoid(),nn.Linear(84, 10))
我们对原始模型做了一点小改动去掉了最后一层的高斯激活。除此之外这个网络与最初的LeNet-5一致。
我们将一个大小为\(28 \times 28\)的单通道黑白图像通过LeNet。通过在每一层打印输出的形状我们可以检查模型以确保其操作与我们期望的一致。 LeNet 的简化版
X torch.rand(size(1, 1, 28, 28), dtypetorch.float32)
for layer in net:X layer(X)print(layer.__class__.__name__,output shape: \t,X.shape) Conv2d output shape: torch.Size([1, 6, 28, 28])
Sigmoid output shape: torch.Size([1, 6, 28, 28])
AvgPool2d output shape: torch.Size([1, 6, 14, 14])
Conv2d output shape: torch.Size([1, 16, 10, 10])
Sigmoid output shape: torch.Size([1, 16, 10, 10])
AvgPool2d output shape: torch.Size([1, 16, 5, 5])
Flatten output shape: torch.Size([1, 400])
Linear output shape: torch.Size([1, 120])
Sigmoid output shape: torch.Size([1, 120])
Linear output shape: torch.Size([1, 84])
Sigmoid output shape: torch.Size([1, 84])
Linear output shape: torch.Size([1, 10]) 请注意在整个卷积块中与上一层相比每一层特征的高度和宽度都减小了。 第一个卷积层使用2个像素的填充来补偿\(5 \times 5\)卷积核导致的特征减少。 相反第二个卷积层没有填充因此高度和宽度都减少了4个像素。 随着层叠的上升通道的数量从输入时的1个增加到第一个卷积层之后的6个再到第二个卷积层之后的16个。 同时每个汇聚层的高度和宽度都减半。最后每个全连接层减少维数最终输出一个维数与结果分类数相匹配的输出。