详细介绍:AlexNet读取数据集 与VGG-11网络

原始论文AlexNet在ImageNet上进行训练的,然而本书在这里启用的是Fashion-MNIST素材集,即使在现在GPU上,训练ImageNet模型同时使其收敛需数小时或者数天时间。将AlexNet直接应用于Fashion_MNIST的一个问题是,Fashion-MNIST图像的分辨率低于IMageNet图像,为了解除这个问题,我们将分辨率提高到224像素x224像素,这里需要使用d2l.load_data_fashion_mnist 函数中的resize 参数执行此调整。

batch_size = 128

train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size, resize=224)

7.4.1 训练AlexNet

现在AlexNet能够开始被训练了。与6.6节中的LeNet相比,这里的主要变化时使用更低的学习率训练,这是因为网络更深广,图像分辨率更高,训练卷积网络的成本更高。

lr, num_epochs = 0.01, 10

d2l.train_ch6(net, train_iter, test_iter, num_epochs, lr, d2l_try_gpu())

loss 0.326, train acc 0.881, test acc 0.883

总结:

AlexNet的架构与LeNet相似,但是使用更多的卷积层和更多的参数来拟合大规模的ImageNet数据集

今天,AlexNet 已经被更有效的架构超越,从浅层网络到深层网络的关键一步。

尽管AlexNet代码只比LeNet多几行

暂退法,ReLU和预处理是提升计算机视觉任务性能的其他关键步骤。

7.2 使用块的网络

虽然AlexNet证明深层神经网络桌有成效,没有提供一个通用的模版来指导后续的研究人员设计新的网络,下面几个章节中,将介绍一些常用于设计深层网络的启发式概念。

7.2.1 VGC块

经典卷积神经网络的主要组成部分是下面的这个序列。

1 带填充以保持分辨率的卷积层

2 非线性激活函数,如ReLU

3 汇聚层,如最大汇聚层

而一个VGC块与之类似,由一系列的卷积层组成,后面再加上用于空间降采样的最大汇聚层, 在最初的VGC论文中,使用了带有3x3卷积核,填充为1的卷积层,以及带有2x2汇聚窗口,步骤为2,下面代码中,我们定义一了名为vgg_block的函数来实现一个VGC块。

该函数有3个参数,分别对应于卷积层的数量num_convs, 输入通道的数量in_channels 和输出通道的数量out_channels

importtorch

fromtorchimportnn

fromd2limporttorchasd2l

defvgg_block(num_convs, in_channels, out_channels)

layers=[]

for_inrange(num_convs):

layers.append(nn.Conv2d(in_channels, out_channels, kernel_size=3, padding=1))

layers.append(nn.ReLU())

in_channels=out_channels

layers.append(nn.MaxPool2d(kernel_size=2, stride=2))

returnnn.Sequential(*layers)

7.2.2VGG网络

AlexNet,LeNet一样VGG网络可以分为两部分第一部分主要卷积层汇聚层组成第二部分全连接组成

VGG神经网络连接图7-3几个VGG其中参数变量conv_arch,变量指定了没哥VGG卷积个数输出通道全连接模块AlexNet相同

原始VGG网络5卷积块其中2包含一个卷积层3包含两个卷积层第一个64输出通道后续每个将输出通道翻倍直到输出通道数达到512由于网络使用8卷积3全连接因此通常称为VGG-11

conv_arch=((1,64),(1,128),(2,256),(2,512),(2,512))

下面代码实现了VGG-11可以通过conv_arch执行for循环简单实现

defvgg(conv_arch):

conv_blks=[]

in_channels1

#卷积部分

for(num_convs, out_channels)inconv_arch:

conv_bits.append(vgg_block(num_convs, in_channels, out_channels))

in_channels=out_channels

returnnn.Sequential(

*conv_blks,nn.Flatten(),

#全连接层部分

nn.Linear(out_channels = 7*7, 4096, nn.ReLU(), nn.Dropout(0.5),

nn.Linear(4096, 4096), nn.ReLU()m nn.Dropout(0.5),

nn.Linear(4096, 10))

)

net=vgg(conv_arch)

vgg网络结构

连接层1000

全连接层4096

全连接层4096

接下来我们将构建一个高度宽度都为224单通道数据样本观察每个输出形状

X=torch.randn(size=(1,1,224,224))

forblkinnet:

x=blk(x)

正如代码中看到每个块高度宽度减半最终高度宽度1最后表示送入连接层处理

7.2.3训练模型

由于VGG11AlexNet计算更大构建了一个通道数比较少网络足够用于熏硫胺FashionMNIST数据集

ratio=4

small_conv_arch=[(pair(0), pair[1]//ratio) for pair in conv_arch]

net=vgg(small_conv_arch)

除了使用略高学习率模型训练过程7.1AlexNet类似

posted @ 2025-08-23 22:18  yjbjingcha  阅读(21)  评论(0)    收藏  举报