首页 > 其他分享 >【CNN】用MNIST测试各种CNN网络模型性能

【CNN】用MNIST测试各种CNN网络模型性能

时间:2024-06-30 22:58:09浏览次数:3  
标签:features nn self channels 测试 CNN size MNIST out

使用MNIST测试各类CNN网络性能,在此记录,以便按需选择网络。
除了第一个CNN为自己搭的以外,其余模型使用Pytorch官方模型,这些模型提出时是在ImageNet上进行测试,在此补充在MNIST上的测试。
另外时间有限,每种模型只跑一次得出测试数据,实验结果仅供参考
各种参数:
训练集60000、测试集10000,使用GPU训练
GPU信息

NVIDIA GeForce RTX 4060 Laptop GPU

驱动程序版本:	31.0.15.5222
驱动程序日期:	2024/4/11 星期四
DirectX 版本:	12 (FL 12.1)
物理位置:	PCI 总线 1、设备 0、功能 0

利用率	0%
专用 GPU 内存	0.3/8.0 GB
共享 GPU 内存	0.0/7.8 GB
GPU 内存	0.3/15.8 GB

epoch:10
batch size:16
learning rate:0.001
优化器:AdamW

optimizer = torch.optim.AdamW(model.parameters(), lr=learning_rate)

损失函数:CrossEntropyLoss()

loss_criterion = torch.nn.CrossEntropyLoss()  #交叉熵损失函数

0.CNN(自己随便搭的)

import torch
import torch.nn as nn

class CNN(nn.Module):
    def __init__(self, in_channels,out_channels,padding,linear_input_size,out_features):
        super(CNN,self).__init__()
        
        # 输入通道数 
        self.in_channels = in_channels
        # 全连接层输入大小
        self.linear_input_size = linear_input_size
        # 第一层卷积输出通道数
        self.out_channels = out_channels
        # 全连接层输出类别数
        self.out_features = out_features
        # 边缘填充0圈数
        self.padding=padding
        
        # 卷积层1
        self.conv1 = nn.Sequential(
            # 卷积层,padding:前向计算时在输入特征图周围添加0的圈数
            nn.Conv2d(in_channels=self.in_channels, out_channels=self.out_channels, kernel_size=5, stride=2, padding=self.padding),
            # 归一化层
            nn.BatchNorm2d(self.out_channels),
            # 池化层
            nn.MaxPool2d(kernel_size=5, stride=2)
        )

        # 卷积层2
        self.conv2 = nn.Sequential(
            # 卷积层
            nn.Conv2d(in_channels=self.out_channels, out_channels=self.out_channels*2, kernel_size=4, stride=2, padding=self.padding),
            # 归一化层
            nn.BatchNorm2d(self.out_channels*2),
            # 池化层
            nn.MaxPool2d(kernel_size=4, stride=2)
        )

        # 卷积层3
        self.conv3 = nn.Sequential(
            # 卷积层
            nn.Conv2d(in_channels=self.out_channels*2, out_channels=self.out_channels*4, kernel_size=3, stride=1, padding=self.padding),
            # 归一化层
            nn.BatchNorm2d(self.out_channels*4),
            # 池化层
            nn.MaxPool2d(kernel_size=3, stride=1)
        )

        # 展平层
        self.flatten = torch.nn.Flatten()
        # 激活层1
        self.gelu = nn.GELU()
        # 全连接层1
        self.fc1 = nn.Linear(self.linear_input_size, self.out_features)

    def forward(self,x):
        # 多层卷积
        x = self.conv1(x)
        x = self.conv2(x)
        x = self.conv3(x)
        # 展平层
        x=self.flatten(x)
        # 激活层
        x = self.gelu(x)
        # 全连接层1
        x = self.fc1(x)
        return x

# 定义网络参数
# 输入图像通道数
in_channels = 3
# 第一层卷积输出通道数
out_channels=32
# 边缘填充0圈数
padding_size=5
# 全连接层输入大小
linear_input_size=8192
# 全连接层输出类别数
out_features = 10
# 实例化cnn网络
CNN_model = CNN(in_channels,out_channels,padding_size,linear_input_size,out_features)

1、CNN网络结果

CNN_model = CNN(in_channels,out_channels,padding_size,linear_input_size,out_features)

训练用时:0:04:25
准确率:99.02%
保存模型大小:761.36KB
模型提出时间:202406(由本人)

2、ResNet34

VisionNN_model=torchvision.models.resnet34(pretrained=False,num_classes=out_features)

训练用时:0:21:17
准确率:98.72%
保存模型大小:81.37MB
模型提出时间:2015

3、MobileNet_v3_small

VisionNN_model=torchvision.models.mobilenet_v3_small(pretrained=False,num_classes=out_features)

训练用时:0:12:52
准确率:98.35%
保存模型大小:5.99MB
模型提出时间:2017

4、ConvNeXt_small

VisionNN_model=torchvision.models.convnext_small(pretrained=False,num_classes=out_features)

由于此网络不支持MNIST的3通道28x28尺寸的图像,使用以下这一行代码将图像尺寸调整为32x32

torchvision.transforms.Resize((32, 32))

训练用时:0:32:57(图像扩大到原来的1.14倍,时长仅供参考)
准确率:98.69%
保存模型大小:188.87MB
模型提出时间:2020

5、AlexNet

VisionNN_model=torchvision.models.AlexNet(num_classes=out_features)

进行图像尺寸调整,28x28 -> 65x65

torchvision.transforms.Resize((65, 65)),

训练用时:0:18:06(图像扩大到原来的2.32倍,时长仅供参考)
准确率:97.58%
保存模型大小:217.62MB
模型提出时间:2012

6、EfficientNet_v2_s

VisionNN_model=torchvision.models.efficientnet_v2_s(num_classes=out_features)

训练用时:0:42:55
准确率:95.96%
保存模型大小:77.99MB
模型提出时间:2019

7、MNASNet0_5

VisionNN_model=torchvision.models.mnasnet0_5(num_classes=out_features)

训练用时:0:11:48
准确率:93.55%
保存模型大小:3.82MB
模型提出时间:2018

结论:
当准确率差距较小的情况下,训练速度就成了脱颖而出的关键
本次没有更改Pytorch官方模型的代码,在实际生产中还需要测试不同的架构思想结合起来开发适合的网络模型

modeltime usedaacmodel sizepublished备注
CNN0:04:2599.02%761.36KB2024
MNASNet0_50:11:4893.55%3.82MB2018
MobileNet_v3_small0:12:5298.35%5.99MB2017
AlexNet0:18:0697.58%217.62MB2012输入图像尺寸65x65
ResNet340:21:1798.72%81.37MB2015
ConvNeXt_small0:32:5798.69%188.87MB2020输入图像尺寸32x32
EfficientNet_v2_s0:42:5595.96%77.99MB2019

标签:features,nn,self,channels,测试,CNN,size,MNIST,out
From: https://blog.csdn.net/xudawu201/article/details/140063701

相关文章

  • Windows HLK测试
    一、环境前期准备测试服务器上安装windowsserver2016英文版;测试系统上安装windows10英文版;环境部署参考:WindowsHardwareLabKit二、部署方案WindowsHLK有两种部署方案:加入域的环境和工作组环境,因公司规模小,选择工作组环境。三、开始安装1、测试服务器上安......
  • JAVA高级进阶13单元测试、反射、注解
    第十三天、单元测试、反射、注解单元测试介绍单元测试就是针对最小的功能单元(方法),编写测试代码对其进行正确性测试咱们之前是如何进行单元测试的?有啥问题?只能在main方法编写测试代码,去调用其他方法进行测试。无法实现自动化测试,一个方法测试失败,可能影响其他方......
  • 动手学深度学习(Pytorch版)代码实践 -计算机视觉-44目标检测算法综述:R-CNN、SSD和YOLO
    41~44目标检测算法综述:R-CNN、SSD和YOLO1.区域卷积神经网络(R-CNN系列)1.1R-CNN使用启发式搜索算法来选择锚框。使用预训练模型对每个锚框提取特征(每个锚框视为一张图片,使用CNN提取特征)。训练SVM进行类别分类(在神经网络之前进行)。训练线性回归模型预测边界框偏移......
  • 四、API 测试怎么做
    如何应对复杂场景的API测试?测试场景一:被测业务操作是由多个API调用协作完成背景:一个单一的前端操作可能会触发后端一系列的API调用,此时API的测试用例就不再是简单的单个API调用,而是一系列API的调用。存在情况:(1)存在后一个API需要使用前一个API返回结果的情况。......
  • 《最新出炉》系列入门篇-Python+Playwright自动化测试-52- 字符串操作 - 下篇
    1.简介在日常的自动化测试工作中进行断言的时候,我们可能经常遇到的场景。从一个字符串中找出一组数字或者其中的某些关键字,而不是将这一串字符串作为结果进行断言。这个时候就需要我们对字符串进行操作,宏哥这里介绍两种方法:正则和字符串切片函数split()。2.测试场景宏哥在这里......
  • [本科项目实训] P-Tuning v2 测试记录
    测试脚本PRE_SEQ_LEN=64CHECKPOINT=dsbtpg-chatglm-6b-pt-64-2e-2STEP=500CUDA_VISIBLE_DEVICES=0python3main.py\--do_predict\--validation_filedevVX.json\--test_filedevVX.json\--overwrite_cache\--prompt_columncontent\......
  • Depth Anything环境搭建&推理测试
    ​引子基于单目摄像头的深度估计,一直是CV领域的一个难点,之前也对此关注也不够多。偶然浏览技术博客,看到DepthAnything:UnleashingthePowerofLarge-ScaleUnlabeledData这个最新CVPR2024的工作。看到名字,大概也能猜出来这篇是致敬SegmentAnything(之前也分享过一篇这个主题......
  • sdk测试和app测试区别
    测试对象、内容和方法SDK测试和APP测试的主要区别在于测试对象、内容和方法。12测试对象不同:SDK测试的对象主要是软件开发工具包(SDK),这是为帮助开发者实现特定功能而提供的一组软件开发工具、文档、示例代码等。相比之下,APP测试的对象是完整的手机应用程序,包......
  • 测试面试题
    冒烟测试是什么意思呀?冒烟测试(SmokeTesting)是一种初步的测试,主要是用来验证软件的基本功能是否正常运行。就像在买一个电器之前,先插电看它是否能启动一样,冒烟测试会检查软件最重要的功能是否工作正常,如果基本功能有问题,测试就不会继续深入。你们公司的项目流程是什么呀?每......
  • VMware Workstation环境下DNS的安装配置,并使用ubuntu来测试
    需求说明:某企业信息中心计划使用IP地址17216.11.0用于虚拟网络测试,注册域名为xyz.net.cn.并将172.16.11.2作为主域名的服务器(DNS服务器)的IP地址,将172.16.11.3分配给虚拟网络测试的DHCP服务器,将172.16.11.4分配给虚拟网络测试的web服务器,将172.16.11.5分配给FTP服务器,将......