当前位置: 首页 > ds >正文

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

import torch

from torch import nn

from d2l import torch as d2l

def vgg_block(num_convs, in_channels, out_channels)

layers = []

for _ in range(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))

return nn.Sequential(*layers)

7.2.2 VGG网络

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循环简单实现

def vgg(conv_arch):

conv_blks=[]

in_channels 1

#卷积部分

for (num_convs, out_channels) in conv_arch:

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

in_channels = out_channels

return nn.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))

for blk in net:

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类似

http://www.xdnf.cn/news/18675.html

相关文章:

  • 视频编码异常的表现
  • `strchr` 字符串查找函数
  • C++中的右值引用与通用引用:std::move与std::forward的正确使用 (Effective Modern C++ 条款25)
  • 《CF1245D Shichikuji and Power Grid》
  • 嵌入式学习 day57 驱动-驱动框架
  • 国产CANFD芯片技术特性与应用前景综述:以ASM1042系列为例
  • Java试题-选择题(14)
  • 番茄(西红柿)叶片病害检测数据集:12k+图像,10类,yolo标注
  • 2025-08-22 Python进阶10——魔术方法
  • 从原理到实践:朴素贝叶斯算法的魅力解析
  • 构建城市数字孪生底座:深度解析智慧城市全景视频拼接融合解决方案
  • ingress和service区别
  • 未来已来?AI 预测技术在气象、金融领域的应用现状与风险警示
  • python3GUI--Joy音乐播放器 在线播放器 播放器 By:PyQt5(附下载地址)
  • Java面试-== 和 equals() 方法的区别与实现原理
  • Unreal Engine UE_LOG
  • 电脑芯片大的32位与64位指的是什么
  • 【数据结构】B+ 树——高度近似于菌丝网络——详细解说与其 C 代码实现
  • 面向RF设计人员的微带贴片天线计算器
  • AI领域的语义空间是什么?
  • ES6变量与解构:let、const与模板字符串全解析
  • 「越短越合法」型滑动窗口
  • 解释一下,Linux,shell,Vmware,Ubuntu,以及Linux命令和shell命令的区别
  • 111、【OS】【Nuttx】【周边】效果呈现方案解析:-print0 选项
  • Linux操作系统编程——网络
  • 第二阶段WinFrom-6:文件对话框,对象的本地保存,序列化与反序列化,CSV文件操作,INI文件读写
  • 08.21总结
  • Claude Code 三类.md文件
  • Day2--HOT100--283. 移动零,11. 盛最多水的容器,15. 三数之和
  • PCB电路设计学习2 元件原理图封装的添加 手工设计元件封装