LeNet-5(fashion-mnist)

2024-01-10 20:36
文章标签 mnist lenet fashion

本文主要是介绍LeNet-5(fashion-mnist),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 前言
  • LeNet
  • 模型训练

前言

LeNet是最早发布的卷积神经网络之一。该模型被提出用于识别图像中的手写数字。

LeNet

LeNet-5由以下两个部分组成

  • 卷积编码器(2)
  • 全连接层(3)
    卷积块由一个卷积层、一个sigmoid激活函数和一个平均汇聚层组成。
    第一个卷积层有6个输出通道,第二个卷积层有16个输出通道。采用2×2的汇聚操作,且步幅为2.
    3个全连接层分别有120,84,10个输出。
    此处对原始模型做出部分修改,去除最后一层的高斯激活。
net=nn.Sequential(nn.Conv2d(1,6,kernel_size=5,padding=2),nn.Sigmoid(),nn.AvgPool2d(kernel_size=2,stride=2),nn.Conv2d(6,16,kernel_size=5),nn.Sigmoid(),nn.AvgPool2d(kernel_size=2,stride=2),nn.Flatten(),nn.Linear(16*5*5,120),nn.Sigmoid(),nn.Linear(120,84),nn.Sigmoid(),nn.Linear(84,10))

模型训练

为了加快训练,使用GPU计算测试集上的精度以及训练过程中的计算。
此处采用xavier初始化模型参数以及交叉熵损失函数和小批量梯度下降。

batch_size=256
train_iter,test_iter=data_iter.load_data_fashion_mnist(batch_size)

将数据送入GPU进行计算测试集准确率

def evaluate_accuracy_gpu(net,data_iter,device=None):"""使用GPU计算模型在数据集上的精度"""if isinstance(net,torch.nn.Module):net.eval()if not device:device=next(iter(net.parameters())).device# 正确预测的数量,预测的总数eva = 0.0y_num = 0.0with torch.no_grad():for X,y in data_iter:if isinstance(X,list):X=[x.to(device) for x in X]else:X=X.to(device)y=y.to(device)eva += accuracy(net(X), y)y_num += y.numel()return eva/y_num

训练过程同样将数据送入GPU计算

def train_epoch_gpu(net, train_iter, loss, updater,device):# 训练损失之和,训练准确数之和,样本数train_loss_sum = 0.0train_acc_sum = 0.0num_samples = 0.0# timer = d2l.torch.Timer()for i, (X, y) in enumerate(train_iter):# timer.start()updater.zero_grad()X, y = X.to(device), y.to(device)y_hat = net(X)l = loss(y_hat, y)l.backward()updater.step()with torch.no_grad():train_loss_sum += l * X.shape[0]train_acc_sum += evaluation.accuracy(y_hat, y)num_samples += X.shape[0]# timer.stop()return train_loss_sum/num_samples,train_acc_sum/num_samplesdef train_gpu(net,train_iter,test_iter,num_epochs,lr,device):def init_weights(m):if type(m)==torch.nn.Linear or type(m)==torch.nn.Conv2d:torch.nn.init.xavier_uniform_(m.weight)net.apply(init_weights)net.to(device)print('training on',device)optimizer=torch.optim.SGD(net.parameters(),lr=lr)loss=torch.nn.CrossEntropyLoss()# num_batches=len(train_iter)tr_l=[]tr_a=[]te_a=[]for epoch in range(num_epochs):net.train()train_metric=train_epoch_gpu(net,train_iter,loss,optimizer,device)test_accuracy = evaluation.evaluate_accuracy_gpu(net, test_iter)train_loss, train_acc = train_metrictrain_loss = train_loss.cpu().detach().numpy()tr_l.append(train_loss)tr_a.append(train_acc)te_a.append(test_accuracy)print(f'epoch: {epoch + 1}, train_loss: {train_loss}, train_acc: {train_acc}, test_acc:{test_accuracy}')x = torch.arange(num_epochs)plt.plot((x + 1), tr_l, '-', label='train_loss')plt.plot(x + 1, tr_a, '--', label='train_acc')plt.plot(x + 1, te_a, '-.', label='test_acc')plt.legend()plt.show()print(f'on {str(device)}')
lr,num_epochs=0.9,10
Train.train_gpu(net,train_iter,test_iter,num_epochs,lr,device='cuda')

在这里插入图片描述
在这里插入图片描述

这篇关于LeNet-5(fashion-mnist)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/591997

相关文章

T1打卡——mnist手写数字识别

🍨 本文为🔗365天深度学习训练营中的学习记录博客🍖 原作者:K同学啊 1.定义GPU import tensorflow as tfgpus=tf.config.list_physical_devices("GPU")if gpus:gpu0=gpus[0]tf.config.experimental.set_memort_groth(gpu0,True) #设置GPU现存用量按需

【tensorflow CNN】构建cnn网络,识别mnist手写数字识别

#coding:utf8"""构建cnn网络,识别mnistinput conv1 padding max_pool([2,2],strides=[2,2]) conv2 x[-1,28,28,1] 卷积 [5,5,1,32] -> [-1,24,24,32]->[-1,28,

直接训练SNN:从LIF模型到MNIST分类的完整实战【含源码】

我们计划使用原生Python代码直接训练SNN,并在相同的精度、超参数和网络结构下与SpikingJelly进行精度对比。以下是基准方法和相关教程的链接: 时间驱动:使用单层全连接SNN识别MNIST — SpikingJelly alpha 文档 在直接训练SNN时,我们需要实现以下三个方面: LIF神经元:实现充电、发射脉冲、重置等操作。编码方式:将连续值转换为适合SNN输入的形式

windows环境Caffe安装配置步骤(无GPU)及mnist训练

最初的想法是动手熟悉Caffe,考虑到直接上手Ubuntu会有些难度,所以首先在windows环境下打个基础。有个插曲,台式机由于某些原因只能保持在32位系统,编译caffe.cpp时才发现系统不兼容,然后才换到64位的笔记本上进行操作。  前期准备:1.VS 2013   2. windows版的Caffe(https://github.com/BVLC/caffe/tree/window

①softmax回归MNIST手写数字识别

Softmax在机器学习中有着非常广泛的应用,他计算简单而且效果显著。 假设有两个数a和b,且a>b > c 如果取max,结果是a 如果取softmax,则softmax(a) > softmax(b) > softmax(c),softmax把所有的选项都给出概率。 MNIST手写数字识别是一个使用softmax回归(softmax regression)模型

什么是LeNet-5?

LeNet-5是由Yann LeCun教授在1998年提出的,是一种经典的卷积神经网络(CNN),是现代卷积神经网络的起源之一。该网络最初被用于手写邮政编码的识别,并以其良好的学习和识别能力而著称。LeNet-5在深度学习领域,特别是在计算机视觉领域的发展中占据了重要地位。 LeNet-5的网络结构 LeNet-5网络结构相对简洁,但包含了卷积神经网络的基本组件。具体来说,LeNet-5由

Ubuntu18.04LTS下基于 Anaconda3 安装 Caffe-GPU及 Python3.6 + Pycharm + Mnist例子教程(超详细)

PDF版本请点击此处下载 1.    配置Anaconda3 1.1.  下载安装包 官网下载地址:https://www.anaconda.com/download/#linux 1.2.  安装 下载完之后是后缀.sh文件 在终端输入:bash Anaconda3-5.0.0.1-Linux-x86_64.sh 2.    切换默认Python版本 2.1.  查看Pyth

基于胶囊网络的Fashion-MNIST数据集的10分类

胶囊网络 原文:Dynamic Routing Between Capsules 源码:https://github.com/XifengGuo/CapsNet-Fashion-MNIST 数据集 Fashion-MNIST数据集由70000张 28 ∗ 28 28*28 28∗28大小的灰度图像组成,共有10个类别,每一类别各有7000张图像。数据集划分为两部分,即训练集和测试集。

一文彻底搞懂CNN - 手写数字识别(LeNet-5)

LeNet-5是Yann LeCun在1998年设计的用于手写数字识别的卷积神经网络,是深度学习领域中的早期重要里程碑之一。它是第一个成功应用于手写数字识别的卷积神经网络,标志着深度学习在计算机视觉领域的初步应用。 MNIST数据集 LeNet-5以其简洁而有效的结构,成为了早期卷积神经网络中最具代表性之一。它成功奠定了卷积神经网络在计算机视觉领域的地位。 LeNet-5 一、CN

穿越时光的经典:从LeNet到ResNet,机器学习中的CNN架构进化史

在机器学习的浩瀚星空中,卷积神经网络(Convolutional Neural Networks, CNNs)无疑是最为耀眼的星辰之一,它们以其卓越的图像处理能力,在计算机视觉领域书写了无数辉煌篇章。从最初的简单架构到如今复杂而高效的模型,经典CNN架构的演变不仅见证了人工智能技术的飞速进步,也深刻影响了我们对图像理解方式的认知。本文将带您踏上一场从LeNet到ResNet的经典CNN架构进化