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

算法与编程之美 算法与编程之美     2023-01-22     490

关键词:

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的值,从中收获颇深。

使用vgg网络进行mnist图像分类

1问题VGG网络由牛津大学的OxfordVisualGeometryGroup于2015年提出。从诞生之后就收到了学界的广泛关注。VGG网络,可以应用在人脸识别、图像分类等方面。VGG有两种结构,分别为16层和19层。具体结构在其文献做了详细表述,... 查看详情

搭建不同网络训练mnist

问题在之前的学习过程中,我们学习了如何搭建全连接神经网络训练Mnist数据集。初始时,全连接神经网络训练结果验证集和训练集的精确度不高,在对数据进行归一化,调参等操作提高了精确度。我们这次使用Le... 查看详情

神经网络的学习-搭建神经网络实现mnist数据集分类(代码片段)

文章目录四、神经网络的学习1.损失函数2.损失函数的意义3.数值微分4.梯度法5.学习算法的实现四、神经网络的学习这一章通过两层神经网络实现对mnist手写数据集的识别,本文是源于《深度学习入门》的学习笔记若理解困难&... 查看详情

基于pytorch平台实现对mnist数据集的分类分析(前馈神经网络softmax)基础版(代码片段)

...于pytorch平台实现对MNIST数据集的分类分析(前馈神经网络、softmax)基础版文章目录基于pytorch平台实现对MNIST数据集的分类分析(前馈神经网络、softmax)基础版前言一、基于“前馈神经网络”模型,分类分析二... 查看详情

pytorch实现rnn网络对mnist字体分类(代码片段)

...据集建立分类器。目录1.准备数据集、定义数据加载器2.搭建RNN网络 3.RNN网络的训练与预测1.准备数据集、定义数据加载器在进行数据准备工作时,可以直接从torchvision库的datasets模块导入MNIST手写字体的训练数据集和测试数据... 查看详情

神经网络学习小记录61——tensorflow2搭建常见分类网络平台(vgg16mobilenetresnet50)(代码片段)

神经网络学习小记录61——Tensorflow2搭建常见分类网络平台(VGG16、MobileNet、ResNet50)学习前言源码下载分类网络的常见形式分类网络介绍1、VGG16网络介绍2、MobilenetV1网络介绍3、ResNet50网络介绍a、什么是残差网络b、什么是R... 查看详情

04-vgg16图像分类

   图1VGG的网络结构  图2VGG16的网络 VGG网络结构的理解,参考:https://blog.csdn.net/Keep_Trying_Go/article/details/123943751Cifar10的vgg16网络pytorch实现,参考:https://www.jianshu.com/p/49013b2cbcb3 查看详情

图像分类基于pytorch搭建lstm实现mnist手写数字体识别(双向lstm,附完整代码和数据集)(代码片段)

.../AugustMe/article/details/128969138文章中,我们使用了基于PyTorch搭建LSTM实现MNIST手写数字体识别,LSTM是单向的,现在我们使用双向LSTM试一试效果,和之前的单向LSTM模型稍微有差别,请注意查看代码的变化。1.导入依赖库这些依赖库是... 查看详情

基于tensorflow的cnn卷积神经网络对fasion-mnist数据集的分类器(代码片段)

写一个基于tensorflow的cnn,分类fasion-MNIST数据集这个就是fasion-mnist数据集了先上代码,在分析:importtensorflowastfimportpandasaspdimportnumpyasnpconfig=tf.ConfigProto()config.gpu_options.per_process_gpu_memory_fraction=0.3train_ 查看详情

pytorch之神经网络mnist分类任务(代码片段)

...52一、Mnist分类任务简介在上一篇博客当中,我们通过搭建PyTorch神经网络实现了气温预测,这本质上是一个回归任务。在本次博文当中,我们使用PyTorch做一个分类任务。其实,分类任务和回归任务在本质上没有任... 查看详情

ana网络分析(代码片段)

ANN网络分析Mnist手写数字识别Mnist数据集可以从官网下载,网址: http://yann.lecun.com/exdb/mnist/ 下载下来的数据集被分成两部分:55000行的训练数据集(mnist.train)和10000行的测试数据集(mnist.test)。每一个MNIST数据单元有两... 查看详情

paddle环境中使用lenet在mnist数据集实现图像分类(代码片段)

...Stuio中使用LeNet在MNIST数据集实现图像分类示例。基于可以搭建其他网络程序。关键词:MNIST,Paddle,LeNet#mermaid-svg-v4c2Ph5QOzcNELb5.labelfont-family:\'trebuchetms\',verdana,arial;font-family:var(--mermaid-font-family);fill:#333;color:#333#mermaid-svg-... 查看详情

使用lenet网络进行mnist图像分类

...LeNet网络,在MNIST数据集上进行图像分类实验。2方法搭建网络实验结果:3结语LeNet网络,训练了100周期可以看出,LeNet网络的最终结果精度比较低,但是模型的训练时长比较短,全连接网络的训练精度也可... 查看详情

实现手写体mnist数据集的识别任务(代码片段)

...ist数据集的识别任务,共分为三个模块文件,分别是描述网络结构的前向传播过程文件(mnist_forward.py)、描述网络参数优化方法的反向传播过程文件(mnist_backward.py)、验证模型准确率的 测试过程文件(mnist_test.py)。 ... 查看详情

pytorchnote25深层神经网络实现mnist手写数字分类(代码片段)

PytorchNote25深层神经网络实现MNIST手写数字分类文章目录PytorchNote25深层神经网络实现MNIST手写数字分类MNIST数据集多分类问题softmax交叉熵多层全连接神经网络实现MINST手写数字分类数据预处理简单的四层全连接神经网络定义loss函数... 查看详情

深度学习图像分类vgg网络结构(代码片段)

目录1VGG的网络架构2手写数字势识别3数据读取4模型编译5模型训练6模型评估1VGG的网络架构2014年,牛津大学计算机视觉组(VisualGeometryGroup)和GoogleDeepMind公司的研究员一起研发出了新的深度卷积神经网络:VGGNetÿ... 查看详情

如何在 Keras 中重用 VGG19 进行图像分类?

】如何在Keras中重用VGG19进行图像分类?【英文标题】:HowtoreuseVGG19forimageclassificationinKeras?【发布时间】:2018-02-1909:41:09【问题描述】:我目前正在尝试了解如何重用VGG19(或其他架构)以改进我的小型图像分类模型。我将图像(... 查看详情

了解vgg网络结构特点,利用vgg完成图像分类(代码片段)

学习目标知道VGG网络结构的特点能够利用VGG完成图像分类2014年,牛津大学计算机视觉组(VisualGeometryGroup)和GoogleDeepMind公司的研究员一起研发出了新的深度卷积神经网络:VGGNet,并取得了ILSVRC2014比赛分类项目... 查看详情