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

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.dtcms.com/a/343816.html

相关文章:

  • 字节Seed-OSS开源,不卷参数卷脑子
  • 防火墙双机热备
  • 【CV】OpenCV①——图形处理简介
  • C#_面向对象设计的艺术
  • [特殊字符] 高可用高并发微服务架构设计:Nginx 与 API Gateway 的协同实践
  • Oracle DB 10g 升级至 11.2.0.4报错-ORA-00132
  • 论文阅读:Do As I Can, Not As I Say: Grounding Language in Robotic Affordances
  • 大模型微调训练资源占用查询:Windows 10 查看 NVIDIA 显卡GPU状态教程(替代 Ubuntu 下 watch nvidia-smi)
  • 从零开始:C语言配置文件解析实战(二)—— 数据解析与键值获取
  • 相机曝光调节与自动曝光控制详解
  • 11、Informer论文笔记
  • 高通Camx相机dump yuv和raw图的抓取方式和查看
  • Linux 软件编程(九)网络编程:IP、端口与 UDP 套接字
  • Jmeter混合业务负载测试指南
  • 定制吹塑服务:塑料成型领域的“柔性制造”新范式
  • 计算机网络:TCP、UDP
  • 管理型交换机通过VLAN划分实现不同IP跨网段通信配置方法
  • JavaEE 初阶第二十期:网络编程“通关记”(二)
  • 微前端qiankun框架,子页面图标样式错乱问题,显示为X
  • Halcon那些事:什么是动态阈值,如何用dyn_threshold分割图片
  • Elasticsearch Rails 实战全指南(elasticsearch-rails / elasticsearch-model)
  • 集成电路学习:什么是K-NN最近邻算法
  • Seaborn数据可视化实战:Seaborn图表定制与数据可视化入门
  • AI+虚拟仿真:以科技之光照亮希望的田野
  • 课小悦系列智能耳机上市,用硬核科技为教育赋能
  • 学习嵌入式第二十三天——数据结构——栈
  • Qt5 文件与数据处理详解
  • NETSDK1045 当前 .NET SDK 不支持将 .NET 8.0 设置为目标。请将 .NET 5.0 或更低版本设置为目标,或使用支持
  • 【FPGA Interlaken协议】
  • 服务器与客户端