如何搭建VGG网络,实现Mnist数据集的图像分类

简介: 如何搭建VGG网络,实现Mnist数据集的图像分类

1 问题

如何搭建VGG网络,实现Mnist数据集的图像分类?


2 方法

步骤:

  1. 首先导包
    Import torch
    from torch import nn
  2. VGG11由8个卷积,三个全连接组成,注意池化只改变特征图大小,不改变通道数
    class MyNet(nn.Module):
       def __init__(self) -> None:
           super().__init__()
           #(1)conv3-64
           self.conv1 = nn.Conv2d(
               in_channels=3,
               out_channels=64,
               kernel_size=3,
               stride=1,
               padding=1 #! 不改变特征图的大小
           )
           #! 池化只改变特征图大小,不改变通道数
           self.max_pool_1 = nn.MaxPool2d(2)
           #(2)conv3-128
           self.conv2 = nn.Conv2d(
               in_channels=64,
               out_channels=128,
               kernel_size=3,
               stride=1,
               padding=1
           )
           self.max_pool_2 = nn.MaxPool2d(2)
           #(3) conv3-256,conv3-256
           self.conv3_1 = nn.Conv2d(
               in_channels=128,
               out_channels=256,
               kernel_size=3,
               stride=1,
               padding=1)
           self.conv3_2 = nn.Conv2d(
               in_channels=256,
               out_channels=256,
               kernel_size=3,
               stride=1,
               padding=1
           )
           self.max_pool_3 = nn.MaxPool2d(2)
           #(4)conv3-512,conv3-512
           self.conv4_1 = nn.Conv2d(
               in_channels=256,
               out_channels=512,
               kernel_size=3,
               stride=1,
               padding=1
           )
           self.conv4_2 = nn.Conv2d(
               in_channels=512,
               out_channels=512,
               kernel_size=3,
               stride=1,
               padding=1
           )
           self.max_pool_4 = nn.MaxPool2d(2)
           #(5)conv3-512,conv3-512
           self.conv5_1 = nn.Conv2d(
               in_channels=512,
               out_channels=512,
               kernel_size=3,
               stride=1,
               padding=1
           )
           self.conv5_2 = nn.Conv2d(
               in_channels=512,
               out_channels=512,
               kernel_size=3,
               stride=1,
               padding=1
           )
           self.max_pool_5 = nn.MaxPool2d(2)
           #(6)
           self.fc1 = nn.Linear(25088,4096)
           self.fc2 = nn.Linear(4096,4096)
           self.fc3 = nn.Linear(4096,1000)
       def forward(self,x):
           x = self.conv1(x)
           print(x.shape)
           x = self.max_pool_1(x)
           print(x.shape)
           x = self.conv2(x)
           print(x.shape)
           x = self.max_pool_2(x)
           print(x.shape)
           x = self.conv3_1(x)
           print(x.shape)
           x = self.conv3_2(x)
           print(x.shape)
           x = self.max_pool_3(x)
           print(x.shape)
           x = self.conv4_1(x)
           print(x.shape)
           x = self.conv4_2(x)
           print(x.shape)
           x = self.max_pool_4(x)
           print(x.shape)
           x = self.conv5_1(x)
           print(x.shape)
           x = self.conv5_2(x)
           print(x.shape)
           x = self.max_pool_5(x)
           print(x.shape)
           x = torch.flatten(x,1)
           print(x.shape)
           x = self.fc1(x)
           print(x.shape)
           x = self.fc2(x)
           print(x.shape)
           out = self.fc3(x)
           return out
  3. 给定x查看最后结果
x = torch.rand(128,3,224,224)
net = MyNet()
out = net(x)
print(out.shape)
#torch.Size([128, 1000])


3 结语

  通过本周学习让我学会了VGG11网络,从实验中我遇到的容易出错的地方是卷积的in_features和out_features容易出错,尺寸不对的时候就会报错,在多个卷积的情况下尤其需要注意,第二点容易出错的地方是卷积以及池化所有结束后,一定要使用torch.flatten进行拉伸,第三点容易出错的地方是fc1的in_features,这个我通过使用断点的方法,得到fc1前一步的size值,从而得到in_features的值,从中收获颇深。

目录
相关文章
|
8月前
|
机器学习/深度学习 算法 调度
14种智能算法优化BP神经网络(14种方法)实现数据预测分类研究(Matlab代码实现)
14种智能算法优化BP神经网络(14种方法)实现数据预测分类研究(Matlab代码实现)
578 0
|
9月前
|
机器学习/深度学习 数据采集 运维
匹配网络处理不平衡数据集的6种优化策略:有效提升分类准确率
匹配网络是一种基于度量的元学习方法,通过计算查询样本与支持集样本的相似性实现分类。其核心依赖距离度量函数(如余弦相似度),并引入注意力机制对特征维度加权,提升对关键特征的关注能力,尤其在处理复杂或噪声数据时表现出更强的泛化性。
457 6
匹配网络处理不平衡数据集的6种优化策略:有效提升分类准确率
|
7月前
|
机器学习/深度学习 数据采集 存储
概率神经网络的分类预测--基于PNN的变压器故障诊断(Matlab代码实现)
概率神经网络的分类预测--基于PNN的变压器故障诊断(Matlab代码实现)
1002 0
|
8月前
|
安全 网络性能优化 网络虚拟化
网络交换机分类与功能解析
接入交换机(ASW)连接终端设备,提供高密度端口与基础安全策略;二层交换机(LSW)基于MAC地址转发数据,构成局域网基础;汇聚交换机(DSW)聚合流量并实施VLAN路由、QoS等高级策略;核心交换机(CSW)作为网络骨干,具备高性能、高可靠性的高速转发能力;中间交换机(ISW)可指汇聚层设备或刀片服务器内交换模块。典型流量路径为:终端→ASW→DSW/ISW→CSW,分层架构提升网络扩展性与管理效率。(238字)
1905 0
|
12月前
|
算法 PyTorch 算法框架/工具
PyTorch 实现FCN网络用于图像语义分割
本文详细讲解了在昇腾平台上使用PyTorch实现FCN(Fully Convolutional Networks)网络在VOC2012数据集上的训练过程。内容涵盖FCN的创新点分析、网络架构解析、代码实现以及端到端训练流程。重点包括全卷积结构替换全连接层、多尺度特征融合、跳跃连接和反卷积操作等技术细节。通过定义VOCSegDataset类处理数据集,构建FCN8s模型并完成训练与测试。实验结果展示了模型在图像分割任务中的应用效果,同时提供了内存使用优化的参考。
|
12月前
|
存储 数据管理 网络虚拟化
特殊网络类型分类
本文介绍了网络技术中的关键概念,包括虚拟局域网(VLAN)、存储区域网络(SAN)、网络桥接、接入网以及按拓扑结构和交换方式分类的网络类型。VLAN通过逻辑分隔提高性能与安全性;SAN提供高性能的数据存储解决方案;网络桥接实现不同网络间的互联互通;接入网解决“最后一千米”的连接问题。此外,文章详细对比了总线型、星型、树型、环型和网状型等网络拓扑结构的特点,并分析了电路交换、报文交换和分组交换的优缺点,为网络设计与应用提供了全面参考。
479 8
|
机器学习/深度学习 数据采集 编解码
基于DeepSeek的生成对抗网络(GAN)在图像生成中的应用
生成对抗网络(GAN)通过生成器和判别器的对抗训练,生成高质量的合成数据,在图像生成等领域展现巨大潜力。DeepSeek作为高效深度学习框架,提供便捷API支持GAN快速实现和优化。本文详细介绍基于DeepSeek的GAN技术,涵盖基本原理、实现步骤及代码示例,展示其在图像生成中的应用,并探讨优化与改进方法,如WGAN、CGAN等,解决模式崩溃、训练不稳定等问题。最后,总结GAN在艺术创作、数据增强、图像修复等场景的应用前景。
1308 16
|
计算机视觉
RT-DETR改进策略【卷积层】| CGblock 内容引导网络 利用不同层次信息,提高多类别分类能力 (含二次创新)
RT-DETR改进策略【卷积层】| CGblock 内容引导网络 利用不同层次信息,提高多类别分类能力 (含二次创新)
319 5
RT-DETR改进策略【卷积层】| CGblock 内容引导网络 利用不同层次信息,提高多类别分类能力 (含二次创新)
|
SQL 安全 网络安全
网络安全与信息安全:知识分享####
【10月更文挑战第21天】 随着数字化时代的快速发展,网络安全和信息安全已成为个人和企业不可忽视的关键问题。本文将探讨网络安全漏洞、加密技术以及安全意识的重要性,并提供一些实用的建议,帮助读者提高自身的网络安全防护能力。 ####
418 17
|
SQL 安全 网络安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将从网络安全漏洞、加密技术和安全意识三个方面进行探讨,旨在提高读者对网络安全的认识和防范能力。通过分析常见的网络安全漏洞,介绍加密技术的基本原理和应用,以及强调安全意识的重要性,帮助读者更好地保护自己的网络信息安全。
328 10

热门文章

最新文章