lenet模型对cifar-10数据集分类pytorch(代码片段)

LA-AL LA-AL     2022-12-09     254

关键词:

LeNet模型对CIFAR-10数据集分类【pytorch】

目录

本文为针对CIFAR-10数据集的基于简单神经网络LeNet分类实现(pytorch实现)

LeNet 网络模型

LeNet简化版
Tip:(以上为原始LeNet)为了更好的效果,我在模型实现时此处将池化层换为Max

CIFAR-10 数据集

CIFAR-10数据集由60000张32x32的彩色图像组成,分为10类,每类有6000张图像。有50000张训练图像和10000张测试图像。

该数据集被分为五个训练批和一个测试批,每个批有10000张图像。测试批包含从每个类中随机选择的1000张图像。训练批包含其余的随机顺序的图像,但有些训练批可能包含一个类别的图像多于另一个。在它们之间,训练批次恰好包含了每个类别的5000张图像。

下面是数据集中的类别,以及每个类别的10张随机图像。
数据集图片类型

关于数据集更多详情请见:CIFAR-10数据集官方说明

Pytorch 实现代码

import torch
from torch import  nn
import torch.nn.functional as F
import torchvision
import torch.utils.data as data
import torchvision.transforms as transforms


class Lenet5(nn.Module):

    def __init__(self,input_channels):
        super().__init__()
        #第1个卷积层
        self.conv1 = nn.Conv2d(input_channels , 6 , kernel_size = 5 , padding = 2)
        #第1个池化层
        self.pooling1 = nn.MaxPool2d(kernel_size = 2, stride = 2)
        #第2个卷积层
        self.conv2= nn.Conv2d(6 , 16 , kernel_size=5)
        #第2个池化层
        self.pooling2 = nn.MaxPool2d(kernel_size = 2, stride=2)
        ##最后的三个FC
        self.Flatten = nn.Flatten()
        # 计算得出的当前的前面处理过后的shape,当然也可print出来以后再确定
        self.Linear1 = nn.Linear(16*6*6,120)
        self.Linear2 = nn.Linear(120,84)
        self.Linear3 = nn.Linear(84,10)

    def forward(self,X):
    ''' 前向推导 '''
        X = self.pooling1(F.relu(self.conv1(X)))
        X = self.pooling2(F.relu(self.conv2(X)))
        X = X.view(X.size()[0],-1)
        X = F.relu(self.Linear1(X))
        X = F.relu(self.Linear2(X))
        X = F.relu(self.Linear3(X))

        return X


def load_CIFAR10(batch_size, resize=None):
    """ 加载数据集到内存 """
    trans = [transforms.ToTensor(),transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))]
    if resize:
        trans.insert(0, transforms.Resize(resize))

    trans = transforms.Compose(trans)
    mnist_train = torchvision.datasets.CIFAR10(root="dataset",
                                                    train=True,
                                                    transform=trans,
                                                    download=True)
    mnist_test = torchvision.datasets.CIFAR10(root="dataset",
                                                   train=False,
                                                   transform=trans,
                                                   download=True)
    return (data.DataLoader(mnist_train, batch_size, shuffle=True,
                            num_workers=2),
                data.DataLoader(mnist_test, batch_size, shuffle=False,
                            num_workers=2))



def get_labels(labels):
    '''    标签转换  '''
    text_labels = ['plane', 'car', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck']
    return [text_labels[int(i)] for i in labels]




def train(loss,updater,train_iter,net,epoches):
    '''  训练模型  '''
    for epoch in range(epoches):
        run_loss = 0
        for step,(X,y) in enumerate(train_iter):
            if torch.cuda.is_available():
                X = X.cuda()
                y = y.cuda()
            y_hat = net.forward(X)  #前向推导
            ls = loss(y_hat,y).sum() #计算误差
            updater.zero_grad() #梯度清零
            ls.backward() #计算新的梯度
            run_loss += ls.item()
            updater.step() #更新权值
        print( f'true:y preds:y_hat.argmax(axis=1) epoch:epoch:02d\\t epoch_loss run_loss/5000\\t ')
    print('finished training\\n')

def predict(net,test_iter,n=6):
    '''   测试集预测 '''
    for X, y in test_iter:
        if torch.cuda.is_available():
            X = X.cuda()
            y = y.cuda()
        trues = get_labels(y)
        preds = get_labels(net(X).argmax(axis=1))
        titles = ['groundTruth :'+true + ' ' +'preds: '+ pred for true, pred in zip(trues, preds)]
        print(titles[0:n])



if __name__ == '__main__':
    #设置超参数
    batch_size,  learning_rate,  epoches = 10, 0.05, 1  
    #加载数据
    trainSet,testSet = load_CIFAR10(batch_size) 
    #加载模型
    net = Lenet5(3) 
    if torch.cuda.is_available():
        net.cuda()
    
     # 选择损失函数
    loss = nn.CrossEntropyLoss() 
    # 优化器
    updater = torch.optim.SGD(net.parameters(), lr=learning_rate) 
    #训练 
    train(loss,updater,trainSet,net,batch_size,epoches,learning_rate)
    #测试集预测  
    predict(net,testSet)







我用pytorch复现了lenet-5神经网络(cifar10数据集篇)!

...据集的识别问题。今天我们将使用Pytorch来继续实现LeNet-5模型,并用它来解决CIFAR10数据集的识别。正文开始!二、使用LeNet-5网络结构创建CIFAR-10识别分类器LeNet-5网络本是用来识别MNIST数据集的,下面我们来将LeNet-5应... 查看详情

kerascifar-10图像分类lenet-5篇

...载CIFAR-10数据集可视化数据数据预处理LeNet5网络开始训练模型可视化准确率、损失函数保存模型预测结果数据增强除了用pytorch可以进行图像分类之外,我们也可以利用t 查看详情

kerascifar-10分类lenet-5篇(代码片段)

...载CIFAR-10数据集可视化数据数据预处理LeNet5网络开始训练模型可视化准确率、损失函数保存模型预测结果数据增强除了用pytorch可以进行图像分类之外,我们也可以利用tensorflow来进行图像分类,其中利用tensorflow的后端keras... 查看详情

paddlepaddle系列cifar-10图像分类(代码片段)

...的是,不仅仅是使用简单的卷积神经网络加上全连接层的模型。卷积神经网络大火以来,发展出来许多经典的卷积神经网络模型,包括VGG、ResNet、AlexNet等等。下面将针对CIFAR-10数据集,对图像进行分类。 1、CIFAR-10数据集、Rea... 查看详情

小白学习keras教程二基于cifar-10数据集训练简单的mlp分类模型(代码片段)

@Author:Runsen分类任务的MLP当目标(y)是离散的(分类的)对于损失函数,使用交叉熵;对于评估指标,通常使用accuracy数据集描述CIFAR-10数据集包含10个类中的60000个图像—50000个用于培训,10000个用于测试有关更多信息,请参阅... 查看详情

我用pytorch复现了lenet-5神经网络(cifar10数据集篇)!

...释了!我用PyTorch复现了LeNet-5神经网络(MNIST手写数据集篇)!详细介绍了卷积神经网络LeNet-5的理论部分和使用PyTorch复现LeNet-5网络来解决MNIST数据集的识别问题。今天我们将使用Pytor 查看详情

基于卷积神经网络的cifar10图像分类(代码片段)

...步骤2.1定义标签字典2.2数据预处理2.3定义网络结构2.4查看模型摘要2.5模型训练2.6可视化训练过程数据2.7评估模型及预测2.8应用模型及预测三、实验结果3.1定义显示图像数据及其对应标签的函数3.2可视化预测结果一、CIFAR10数据集... 查看详情

调参侠带你入门深度学习:lenet分类实战:训练与推理(代码片段)

前言上篇文章中我们已经介绍了LeNet模型的搭建,这篇文章我们以CIFAR10这个数据集为例,来带大家体验一波深度学习的魅力!CIFAR10dataset介绍它有以下类别:‘airplane’,‘automobile’,‘bird’,‘cat’,‘deer’,‘dog’,... 查看详情

cifar10数据集分类(代码片段)

importtorchimporttorchvisionimporttorchvision.transformsastransformsimportmatplotlib.pyplotaspltimportnumpyasnpimporttorch.nnasnnimporttorch.nn.functionalasFimporttorch.optimasoptim#使用GPU训练,可以在菜单" 查看详情

深度学习基础:5.cifar10数据集分类及gpu使用实例(代码片段)

前言上篇博文整理了如何用Pytorch搭建一个基本网络模型,本篇进行一个图像分类任务实操。相关代码主要参考自官网教程:https://pytorch.org/tutorials/beginner/blitz/cifar10_tutorial.html#sphx-glr-beginner-blitz-cifar10-tutorial-py数据集简介CI... 查看详情

深度学习原理与框架-神经网络-cifar10分类(代码)(代码片段)

...第一部分:数据的准备   第二部分:神经网络模型的构造,返回loss和梯度值   第三部分:将数据与模型输入到函数中,用于进行模型的训练,同时进行验证集的预测,来判断验证集的预测结果,保留最好... 查看详情

如何获得一个良好的二元分类深度神经模型,其中负数据更多位于数据集上?

】如何获得一个良好的二元分类深度神经模型,其中负数据更多位于数据集上?【英文标题】:Howtogetagoodbinaryclassificationdeepneuralmodelwherenegativedataismoreondataset?【发布时间】:2019-07-0520:31:06【问题描述】:我想使用Cifar-10数据集进... 查看详情

我使用 CNN 模型创建了 CIFAR10 数据集学习模型。为啥会出现错误?

】我使用CNN模型创建了CIFAR10数据集学习模型。为啥会出现错误?【英文标题】:IcreatedaCIFAR10datasetlearningmodelusingaCNNmodel.Whyisthereanerror?我使用CNN模型创建了CIFAR10数据集学习模型。为什么会出现错误?【发布时间】:2020-12-2003:05:23... 查看详情

《30天吃掉那只tensorflow2.0》1-2图片数据建模流程范例(cifar2图片分类问题)

...建模流程范例(cifar2图片分类问题)一,准备数据二,定义模型三,训练模型四,评估模型五,使用模型六,保存模型一,准备数据cifar2数据集为cifar10数据集的子集,只包括前两种类别airplane和automobile。训练集有airplane和automobile图... 查看详情

computervision基于resnet-50实现cifar10数据集分类(代码片段)

【ComputerVision】基于ResNet-50实现CIFAR10数据集分类@TOC前言任务描述图像分类是根据图像的语义信息将不同类别图像区分开来,是计算机视觉中重要的基本问题猫狗分类属于图像分类中的粗粒度分类问题一、美食识别数据集加载(一)... 查看详情

resnet基于迁移学习对cifar10数据集的分类(代码片段)

...的预测完整文件下载地址:resnet基于迁移学习对CIFAR10数据集的分类1. resnet网络Resnet网络的搭建:importtorchimporttorch.nnasnn#residualblockclassBasicBlock(nn.Module):expansion=1def__init__(self,in_channel,out_channel,stride=1,downsample=None):sup... 查看详情

深度学习实战keras构建cnn神经网络完成cifar100类别分类(代码片段)

Keras构建CNN神经网络完成CIFAR100类别分类1.CIFAR100数据集介绍2.API使用3.步骤分析以及代码实现(缩减版LeNet5)4.完整代码1.CIFAR100数据集介绍这个数据集就像CIFAR-10,除了它有100个类,每个类包含600个图像。,每类各有500个... 查看详情

如何用pytorch实现一个分类器?(代码片段)

学习目标了解分类器的任务和数据样式掌握如何用Pytorch实现一个分类器分类器任务和数据介绍构造一个将不同图像进行分类的神经网络分类器,对输入的图片进行判别并完成分类.本案例采用CIFAR10数据集作为原始图片数据.CIFAR10数... 查看详情