新闻详情

新闻详情

首页 / 资讯中心 / 详情

【动手学深度学习】卷积神经网络(AlexNet)的研究详情

发布时间:2026/9/30 6:34:35来源:尧图网络
【动手学深度学习】卷积神经网络(AlexNet)的研究详情
目录1. 研究目的2. 研究准备3. 研究内容3.1 卷积神经网络AlexNet3.2 练习4. 研究体会1. 研究目的多层感知机模型选择比较不同多层感知机模型的性能选择最适合解决给定问题的模型欠拟合和过拟合研究模型在训练数据上出现欠拟合或过拟合的情况以便了解模型的泛化能力和优化方法的效果模型正则化和调参通过实验观察和比较研究正则化技术和调参对模型的影响以改善模型的泛化性能模型复杂度与性能探究多层感知机模型的复杂度对训练和测试性能的影响以及如何找到合适的模型复杂度。2. 研究准备根据GPU安装pytorch版本实现GPU运行研究代码配置环境用来运行 Python、Jupyter Notebook和相关库等相关库。3. 研究内容启动 Jupyter Notebook使用新增的 PyTorch 环境新建 ipynb 文件。为检查环境配置是否合理输入import torch以及torch.cuda.is_available()。若返回 TRUE则说明研究环境配置正确若返回 False 但可正确导入 torch则说明 PyTorch 配置成功但研究运行在 CPU 上进行结果如下3.1卷积神经网络AlexNet1使用 Jupyter Notebook 新增的 PyTorch 环境新建 ipynb 文件完成基本数据操作的研究代码与练习结果如下代码实现如下导入必要库及实现部分%matplotlib inline import torch from torch import nn from d2l import torch as d2l容量控制和预处理net nn.Sequential( # 这里使用一个11*11的更大窗口来捕捉对象。 # 同时步幅为4以减少输出的高度和宽度。 # 另外输出通道的数目远大于LeNet nn.Conv2d(1, 96, kernel_size11, stride4, padding1), nn.ReLU(), nn.MaxPool2d(kernel_size3, stride2), # 减小卷积窗口使用填充为2来使得输入与输出的高和宽一致且增大输出通道数 nn.Conv2d(96, 256, kernel_size5, padding2), nn.ReLU(), nn.MaxPool2d(kernel_size3, stride2), # 使用三个连续的卷积层和较小的卷积窗口。 # 除了最后的卷积层输出通道的数量进一步增加。 # 在前两个卷积层之后汇聚层不用于减少输入的高度和宽度 nn.Conv2d(256, 384, kernel_size3, padding1), nn.ReLU(), nn.Conv2d(384, 384, kernel_size3, padding1), nn.ReLU(), nn.Conv2d(384, 256, kernel_size3, padding1), nn.ReLU(), nn.MaxPool2d(kernel_size3, stride2), nn.Flatten(), # 这里全连接层的输出数量是LeNet中的好几倍。使用dropout层来减轻过拟合 nn.Linear(6400, 4096), nn.ReLU(), nn.Dropout(p0.5), nn.Linear(4096, 4096), nn.ReLU(), nn.Dropout(p0.5), # 最后是输出层。由于这里使用Fashion-MNIST所以用类别数为10而非论文中的1000 nn.Linear(4096, 10)) X torch.randn(1, 1, 224, 224) for layer in net: Xlayer(X) print(layer.class.name,output shape:\t,X.shape)读取数据集batch_size 128 train_iter, test_iter d2l.load_data_fashion_mnist(batch_size, resize224)训练AlexNetlr, num_epochs 0.01, 10 d2l.train_ch6(net, train_iter, test_iter, num_epochs, lr, d2l.try_gpu())3.2练习1.试着增加迭代轮数。对比LeNet的结果有什么不同为什么增加迭代轮数可以让模型更多次地更新参数从而提升性能。对比LeNet增加迭代轮数可能会导致以下不同之处更高的训练准确率通过增加迭代轮数模型有更多机会从训练数据中学习因此可以提高训练准确率。更低的过拟合风险通过增加迭代轮数模型可以更好地学习数据的特征但也可能会导致过拟合。为了缓解过拟合代码中使用了dropout层来减轻过拟合的影响。训练时间增加增加迭代轮数会导致训练时间的增加因为每轮迭代都需要计算和更新更多的参数。因此在实际应用中需要权衡迭代轮数和训练时间之间的关系。更稳定的收敛增加迭代轮数可以使模型更充分地学习数据的特征并且更有可能达到稳定的收敛状态。这可能会导致更好的测试准确率。2.AlexNet对Fashion-MNIST数据集来说可能太复杂了。2.1尝试简化模型以加快训练速度同时确保准确性不会显著下降。为了简化模型以加快训练速度可以尝试减少卷积层的数量和输出通道的数量同时减少全连接层的数量和隐藏单元的数量。这样可以降低模型的复杂度从而加快训练速度同时尽量保持准确性。import torch from torch import nn from d2l import torch as d2l net nn.Sequential( nn.Conv2d(1, 96, kernel_size11, stride4, padding1), nn.ReLU(), nn.MaxPool2d(kernel_size3, stride2), nn.Conv2d(96, 256, kernel_size5, padding2), nn.ReLU(), nn.MaxPool2d(kernel_size3, stride2), nn.Conv2d(256, 384, kernel_size3, padding1), nn.ReLU(), nn.Conv2d(384, 384, kernel_size3, padding1), nn.ReLU(), nn.Conv2d(384, 256, kernel_size3, padding1), nn.ReLU(), nn.MaxPool2d(kernel_size3, stride2), nn.Flatten(), nn.Linear(6400, 4096), nn.ReLU(), nn.Dropout(p0.5), nn.Linear(4096, 4096), nn.ReLU(), nn.Dropout(p0.5), nn.Linear(4096, 10) )在上述代码中我删除了一些卷积层并减少了它们的输出通道数。此外我还减少了全连接层的数量和隐藏单元的数量。这样可以减少模型的参数量从而加快训练速度。但请注意这种简化可能会对准确性产生一定影响因此需要根据具体情况进行权衡。你可以尝试调整模型结构和超参数以找到适合你的数据集的最佳简化模型。2.2设计一个更好的模型可以直接在28×28图像上工作。使用现代的卷积神经网络CNN架构如ResNet、VGG或Inception等。这些网络结构在图像分类任务上表现出色并且能够有效地处理较小的输入图像。以下是一个使用ResNet作为基础的示例模型代码该模型可以直接在28x28图像上进行训练和分类import torch from torch import nn from d2l import torch as d2l class Residual(nn.Module): def init(self, input_channels, num_channels, use_1x1convFalse, strides1): super(Residual, self).init() self.conv1 nn.Conv2d(input_channels, num_channels, kernel_size3, padding1, stridestrides) self.conv2 nn.Conv2d(num_channels, num_channels, kernel_size3, padding1) if use_1x1conv: self.conv3 nn.Conv2d(input_channels, num_channels, kernel_size1, stridestrides) else: self.conv3 None self.bn1 nn.BatchNorm2d(num_channels) self.bn2 nn.BatchNorm2d(num_channels) self.relu nn.ReLU() def forward(self, X): Y self.relu(self.bn1(self.conv1(X))) Y self.bn2(self.conv2(Y)) if self.conv3: X self.conv3(X) return self.relu(Y X) def resnet_block(input_channels, num_channels, num_residuals, first_blockFalse): blk [] for i in range(num_residuals): if i 0 and not first_block: blk.append(Residual(input_channels, num_channels, use_1x1convTrue, strides2)) else: blk.append(Residual(num_channels, num_channels)) return nn.Sequential(*blk) net nn.Sequential( nn.Conv2d(1, 64, kernel_size7, stride2, padding3), nn.BatchNorm2d(64), nn.ReLU(), nn.MaxPool2d(kernel_size3, stride2, padding1), resnet_block(64, 64, 2, first_blockTrue), resnet_block(64, 128, 2), resnet_block(128, 256, 2), nn.AdaptiveAvgPool2d((1, 1)), nn.Flatten(), nn.Linear(256, 10) ) X torch.randn(1, 1, 28, 28) for layer in net: X layer(X) print(layer.class.name, output shape:\t, X.shape) batch_size 128 train_iter, test_iter d2l.load_data_fashion_mnist(batch_size, resize28) lr, num_epochs 0.01, 10 d2l.train_ch6(net, train_iter, test_iter, num_epochs, lr, d2l.try_gpu())在上述代码中使用了ResNet的基本块Residual Block来构建模型。每个基本块由两个卷积层组成通过跳跃连接shortcut connection实现残差学习。模型包括多个基本块逐渐增加通道数和减少特征图的大小最后使用全局平均池化层将特征图转换为向量然后通过全连接层进行分类。通过这种设计可以在较小的28x28图像上训练和分类并且仍然能够获得较好的性能。3.修改批量大小并观察模型精度和GPU显存变化。要修改批量大小并观察模型的准确性和GPU显存的变化可以调整batch_size参数。较大的批量大小可能会提高训练速度但同时会占用更多的GPU显存。4. 分析 AlexNet 的计算性能。4.1在AlexNet中主要是哪部分占用显存在AlexNet中主要占用显存的部分是网络中的卷积层和全连接层。卷积层AlexNet包含多个卷积层这些层具有大量的参数和中间特征图因此会占用较多的显存。卷积层的参数量随着卷积核的大小、输入通道数和输出通道数的增加而增加。同时中间特征图的大小也会随着网络的深度增加而增加从而占用更多的显存。全连接层在AlexNet的最后几层存在多个全连接层其中隐藏单元的数量较大。全连接层的参数量很大因为每个隐藏单元都连接到上一层的所有输出。这些大规模的参数量会占用较多的显存。4.2在AlexNet中主要是哪部分需要更多的计算在AlexNet中主要需要更多计算的部分是卷积层和全连接层。卷积层卷积层涉及到卷积操作需要对输入特征图和卷积核进行逐元素相乘和求和运算。由于AlexNet中的卷积层较多且具有较大的卷积核尺寸和输出通道数因此卷积层需要较多的计算量。全连接层全连接层涉及到每个隐藏单元与上一层的所有输出进行乘法和加法运算。在AlexNet的最后几层存在多个全连接层其中隐藏单元的数量较大。因此全连接层也需要较多的计算量。这两个部分的计算量通常是神经网络中最大的尤其是全连接层因为全连接层的参数量非常大需要大量的乘法和加法运算。4.3 计算结果时显存带宽如何在AlexNet中计算结果时对显存带宽的需求相对较高尤其是在进行前向传播和反向传播过程中。由于AlexNet具有大量的参数和中间特征图计算过程需要频繁地读取和写入显存。以下是一些导致显存带宽需求较高的情况数据加载在每个训练迭代中需要从存储介质如硬盘加载训练数据到显存中。这涉及到大量的数据传输对显存带宽有一定要求。前向传播在前向传播过程中输入数据和模型参数被加载到显存中并进行卷积和全连接计算。这涉及到大量的乘法和加法操作需要频繁读取和写入显存。反向传播在反向传播过程中计算梯度并更新模型参数。这也涉及到大量的乘法和加法操作需要频繁读取和写入显存。模型参数存储AlexNet具有大量的模型参数这些参数需要存储在显存中以便在前向传播和反向传播过程中使用。5. 将 Dropout 和 ReLU 应用于 LeNet-5效果有提升吗再试试预处理会怎么样可以。Dropout 是一种正则化技术可随机丢弃一部分神经元的输出以减少过拟合ReLU 是一种非线性激活函数可增强模型的非线性表达能力。通过引入 Dropout 和 ReLU可提升模型的泛化能力与表示能力从而改善性能。以下是在 LeNet-5 中应用 Dropout 和 ReLU 的示例代码import torch from torch import nn from torchvision.datasets import FashionMNIST from torchvision.transforms import Compose, ToTensor, Normalize from torch.utils.data import DataLoader 添加Dropout和ReLU层 net nn.Sequential( nn.Conv2d(1, 6, kernel_size5, padding2), nn.ReLU(), nn.MaxPool2d(kernel_size2, stride2), nn.Dropout(p0.5), # 添加Dropout层 nn.Conv2d(6, 16, kernel_size5), nn.ReLU(), nn.MaxPool2d(kernel_size2, stride2), nn.Dropout(p0.5), # 添加Dropout层 nn.Flatten(), nn.Linear(16 * 5 * 5, 120), nn.ReLU(), nn.Linear(120, 84), nn.ReLU(), nn.Linear(84, 10) ) 加载Fashion-MNIST数据集并进行预处理 transform Compose([ToTensor(), Normalize((0.5,), (0.5,))]) train_dataset FashionMNIST(root./data, trainTrue, downloadTrue, transformtransform) test_dataset FashionMNIST(root./data, trainFalse, downloadTrue, transformtransform) batch_size 128 train_iter DataLoader(train_dataset, batch_sizebatch_size, shuffleTrue) test_iter DataLoader(test_dataset, batch_sizebatch_size, shuffleFalse) lr, num_epochs 0.001, 10 d2l.train_ch6(net, train_iter, test_iter, num_epochs, lr, d2l.try_gpu())在上述代码中我在LeNet-5中添加了Dropout层并将激活函数替换为ReLU函数。这样可以增加模型的非线性性和泛化能力减轻过拟合的问题。此外还对Fashion-MNIST数据集进行了预处理使用torchvision.transforms.Normalize函数进行数据标准化。预处理可以帮助加快模型的收敛速度和提高模型的准确性。以下是在 LeNet-5 中应用预处理的示例代码import torch from torch import nn from torchvision.datasets import FashionMNIST from torchvision.transforms import Compose, ToTensor, Normalize from torch.utils.data import DataLoader from d2l import torch as d2l 定义LeNet-5模型 net nn.Sequential( nn.Conv2d(1, 6, kernel_size5, padding2), nn.ReLU(), nn.MaxPool2d(kernel_size2, stride2), nn.Conv2d(6, 16, kernel_size5), nn.ReLU(), nn.MaxPool2d(kernel_size2, stride2), nn.Flatten(), nn.Linear(16 * 5 * 5, 120), nn.ReLU(), nn.Linear(120, 84), nn.ReLU(), nn.Linear(84, 10) ) 加载Fashion-MNIST数据集并进行预处理 transform Compose([ToTensor(), Normalize((0.5,), (0.5,))]) train_dataset FashionMNIST(root./data, trainTrue, downloadTrue, transformtransform) test_dataset FashionMNIST(root./data, trainFalse, downloadTrue, transformtransform) batch_size 128 train_iter DataLoader(train_dataset, batch_sizebatch_size, shuffleTrue) test_iter DataLoader(test_dataset, batch_sizebatch_size, shuffleFalse) lr, num_epochs 0.001, 10 d2l.train_ch6(net, train_iter, test_iter, num_epochs, lr, d2l.try_gpu())在上述代码中我使用了torchvision.transforms.Compose来定义一个预处理的管道其中包括ToTensor()将图像转换为张量并归一化Normalize((0.5,), (0.5,))。然后使用FashionMNIST数据集类加载数据集并传递预处理管道。训练集和测试集分别使用DataLoader封装并设置适当的批量大小。最后使用定义好的预处理数据进行LeNet-5模型的训练和测试。4. 研究体会通过这次研究我深入学习了卷积神经网络CNN选择了AlexNet作为研究对象并进行了一系列的探索和应用。实验的过程使我对CNN的原理和工作方式有了更深入的理解同时也让我认识到了AlexNet在深度学习领域的重要性和影响。首先我对CNN的基本原理和工作方式有了更清晰的认识。通过学习卷积层、池化层和全连接层等结构的作用和工作原理我逐渐认识到CNN在图像处理任务中的独特性和优势。卷积层通过局部感知和权重共享的方式能够有效地提取图像的空间特征而池化层则能够降低特征图的维度并保留主要信息全连接层则负责将提取到的特征进行分类。这种层次化的结构使得CNN在图像分类、目标检测等计算机视觉任务中具有出色的性能。其次通过研究AlexNet的网络结构和设计思路我深刻认识到它对深度学习领域的重要性。作为一个早期的深度卷积神经网络模型AlexNet在2012年的ILSVRC竞赛中取得了巨大的成功极大地推动了深度学习的发展。通过分析AlexNet的架构我了解到它采用了多个卷积层和池化层的叠加使用了ReLU激活函数并引入了局部响应归一化的操作。这些设计决策使得AlexNet具有较深的网络结构和更强的表征能力从而在当时取得了最先进的分类性能。在实践中我将AlexNet应用于计算机视觉任务并通过使用预训练的AlexNet模型和自定义数据集探索了如何利用卷积神经网络进行图像分类。通过进行训练和测试我发现AlexNet在分类任务中表现出色能够高效地对图像进行分类并取得较高的准确率。此外我还尝试了不同的训练策略、优化算法和超参数的组合并对比了它们对网络性能的影响。实验中我还对深度学习模型的可解释性和可视化方法进行了探索。通过可视化网络中的卷积特征、激活图和梯度信息等我能更深入地理解AlexNet的工作原理和决策过程。这样的可视化结果让我直观地观察到网络对图像的理解能力并了解网络在不同层次上提取到的特征。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

空气动力学基础PDF精讲:从附面层到CFD仿真的工程实战指南 2026/9/30 7:35:50

空气动力学基础PDF精讲:从附面层到CFD仿真的工程实战指南

简介:《空气动力学基础》是北京航空航天大学精品课程配套讲义,由刘沛清老师主讲,面向航空航天工程及相关专业学生,系统梳理流体力学与空气动力学的核心知识体系。内容从绪论出发,依次涵盖流体的基本属性、流体静力学与…

阅读更多 →
HTTP协议深度解析:从抓包排错到性能优化的完整知识体系 2026/9/30 7:35:50

HTTP协议深度解析:从抓包排错到性能优化的完整知识体系

简介:这份PDF资料面向具备一定网络基础的开发人员与技术爱好者,系统梳理HTTP协议从报文结构、请求方法、URI组成、状态码分类,到无状态与明文传输等固有缺陷的完整知识链路,并延伸至大文件传输、表单提交、队头阻塞、Cookie机制、…

阅读更多 →
黄白助手 第 068 个开关:启用语音转换文件的位置、验证方法与风险边界 2026/9/30 7:35:49

黄白助手 第 068 个开关:启用语音转换文件的位置、验证方法与风险边界

🔥 个人主页: 杨利杰YJlio ❄️ 个人专栏: 《Windows 疑难杂症与工单复盘案例库》 《Sysinternals实战教程》 《WINDOWS教程》 《Windows PowerShell 实战》 《IOS插件分析测试》 《超简单:用Python让Excel飞起来》…

阅读更多 →
Unity动作游戏开发:Invector第三人称控制器与近战系统实战解析 2026/9/30 7:35:49

Unity动作游戏开发:Invector第三人称控制器与近战系统实战解析

第一次把 Invector 的 Third Person Controller / Melee Combat Template 拖进 Unity 时,我其实没有觉得它有多新鲜。Demo 里的角色既不高清,动作也算不上花哨,但等到真要从零搭一个第三人称近战动作游戏,才发现“角色控制器、动画…

阅读更多 →
H3C交换机基础配置实战:从Console到VLAN、路由与运维命令详解 2026/9/30 7:35:48

H3C交换机基础配置实战:从Console到VLAN、路由与运维命令详解

1. 项目概述与设备初始化如果你接手过一台新华三H3C设备,应该有这样的体验:设备通电后,除了风扇声,就是Console口里那个等待输入的光标。很多刚接触网络的人一到这一步会发懵,因为命令行不像图形界面那么直观&#xff…

阅读更多 →
黄白助手 第 071 个开关:启用文件转换语音的位置、验证方法与风险边界 2026/9/30 7:35:42

黄白助手 第 071 个开关:启用文件转换语音的位置、验证方法与风险边界

🔥 个人主页: 杨利杰YJlio ❄️ 个人专栏: 《Windows 疑难杂症与工单复盘案例库》 《Sysinternals实战教程》 《WINDOWS教程》 《Windows PowerShell 实战》 《IOS插件分析测试》 《超简单:用Python让Excel飞起来》…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉