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

深度学习----------------------深度卷积神经网络AlexNet

目录

  • AlexNet网络
    • AlexNet架构
    • 更多细节
  • 总结
  • 深度卷积神经网络(AlexNet)代码
    • 训练AlexNet
  • 问题

AlexNet网络

在这里插入图片描述

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述
加入了丢弃法
从激活函数sigmoid改为了ReLu
LeNet主要用的是平均池化,而AlexNet取的是MaxPooling

丢弃法是为了进行模型的控制(因为模型更大了,所以用丢弃法做一些正则)

ReLu是比sigmoid梯度更大

MaxPooling取最大值,使得输出值比较大,梯度相对来说比较大,使得训练更加容易一点。




AlexNet架构

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

通道数从6变成了96
Pad=2是为了让输入和输出的尺寸是一样的。


更多细节

激活函数从sigmoid变到了ReLu(减缓梯度消失)
隐藏全连接层后加入了丢弃层
数据增强

在这里插入图片描述




总结

    ①AlexNet是更大更深的LeNet,比LeNet多10倍的参数个数,多260倍的计算复杂度。

    ②新加入了丢弃法,ReLU,最大池化层和数据增强。




深度卷积神经网络(AlexNet)代码

import torch
from torch import nn
from d2l import torch as d2lnet = nn.Sequential(# 输出通道的数目远大于LeNet# 输入通道为1,输出通道为96,卷积核大小为11×11,步长为4,填充为1# 使用了一个相对较大的卷积核来捕捉图像中的大尺度特征,并通过较大的步长来减少输出的空间维度(高度和宽度)。# 填充用于保持输出的空间维度不会因卷积操作而急剧减小。nn.Conv2d(1, 96, kernel_size=11, stride=4, padding=1), nn.ReLU(),# 通过最大池化来进一步减少输出的空间维度nn.MaxPool2d(kernel_size=3, stride=2),# 减小卷积窗口,使用填充为2来使得输入与输出的高和宽一致,且增大输出通道,256为输出通道数nn.Conv2d(96, 256, kernel_size=5, padding=2), nn.ReLU(),nn.MaxPool2d(kernel_size=3, stride=2),# 使用三个连续的卷积层和较小的卷积窗口。# 除了最后的卷积层,输出通道的数量进一步增加。# 在前两个卷积层之后,池化层不用于减少输入的高度和宽度nn.Conv2d(256, 384, kernel_size=3, padding=1), nn.ReLU(),nn.Conv2d(384, 384, kernel_size=3, padding=1), nn.ReLU(),nn.Conv2d(384, 256, kernel_size=3, padding=1), nn.ReLU(),nn.MaxPool2d(kernel_size=3, stride=2),nn.Flatten(),# 这里,全连接层的输出数量是LeNet中的好几倍。使用dropout层来减轻过拟合nn.Linear(6400, 4096), nn.ReLU(),nn.Dropout(p=0.5),nn.Linear(4096, 4096), nn.ReLU(),nn.Dropout(p=0.5),# 最后是输出层。由于这里使用Fashion-MNIST,所以用类别数为10,而非论文中的1000nn.Linear(4096, 10))

为什么变成6400了
这里的高度和宽度变为了5,由步长一步一步变小的。这里使用Flatten展为1维,则256×5×5=6400

在这里插入图片描述



我们构造一个高度宽度都为224的(单通道数据,来观察每一层输出的形状)。

X = torch.randn(1, 1, 224, 224)
for layer in net:X=layer(X)print(layer.__class__.__name__,'output shape:\t',X.shape)

结果:
在这里插入图片描述


AlexNet直接应用于Fashion-MNIST的一个问题是,Fashion-MNIST图像的分辨率28×28 像素)(低于ImageNet图像。) 为了解决这个问题,(我们将它们增加到 224×224 )(通常来讲这不是一个明智的做法,但在这里这样做是为了有效使用AlexNet架构)。这里需要使用d2l.load_data_fashion_mnist函数中的resize参数执行此调整

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



训练AlexNet

import timelr, num_epochs = 0.01, 10
time1 = time.time()
d2l.train_ch6(net, train_iter, test_iter, num_epochs, lr, d2l.try_gpu())
time2 = time.time()

这里使用GPU跑,CPU可能跑不动,之前跑过一个跑了很久没跑出来。

结果:
在这里插入图片描述




问题

    ①为什么AlexNet最后要有两个相同的全连接层Dense(4096)?一个行吗?
一个不行,一个效果会差,4096×4096的全连接层是一个非常厉害的模型。因为前面的卷积的特征抽的不够好、不够深,所以后面靠两个Dense来补,有一个效果会变差。

    ②在一个识别细胞的程序里做了颜色+几何变换的增强后效果反倒比只做几何变化的增强效果差。这个可能是因为什么?
很正常的事情,这是一个超参数,调参是一个很辛苦的过程。


http://www.mrgr.cn/news/2107.html

相关文章:

  • Python3网络爬虫开发实战(9)代理的使用 (需补充代理池的构建)
  • 蓝队技能-应急响应篇C2后门权限维持手法WindowsLinux基线检查排查封锁清理
  • 使用 ESP32 和 TFT 屏幕显示实时天气信息 —— 基于 OpenWeatherMap API
  • 大数据背景下基于Python语言的单车租赁商业数据可视化分析
  • 设计资讯 | 这款受数学方程启发的平板桌:配集成黑胶唱片机和无线充电器
  • 无人机模拟训练室技术详解
  • linux基本指令
  • PostgreSQL 不完全兼容 Oracle 的 SQL 语法,如何模拟功能?
  • (亲测有效)SpringBoot项目集成腾讯云COS对象存储(1)
  • CTF 入门指南:从零开始学习网络安全竞赛
  • Go 1.22在性能方面有哪些提升?
  • 02 网络编程-UDP用户数据包协议
  • idea插件
  • C语言程序设计(初识C语言后部分)
  • 巡检机器人有哪些功能和应用场景
  • springboot整合mybatis以及mybatis-plus 开发
  • 深入剖析资产负债率与净资产收益率,掌握财务报表解读技巧
  • 网络安全入门教程(非常详细)从零基础入门到精通_网路安全 教程
  • 金山云Q2调整后EBITDA率提升至3.2% 高质量发展驱动经营质效双增
  • Cesium天空盒子(Skybox)制作(js代码)和显示