【动手学习pytorch笔记】10.卷积神经网络LeNet分类fashion_mnist

【PyTorch】CNN图像识别分类模型 使用PyTorch搭建一个类似LeNet-5的卷积神经网络结构,用于fashion-mnist数据集的图像分类。分为数据准备、模型建立、使用训练集进行训练和使用测试集测试模型效果并可视化。 import numpy as np import pandas as pd from sklearn.metrics import accuracy_score,confusion_matrix,classification_report import matplotlib.pyplot as plt import s 阅读详情

LeNet

模型结构

在这里插入图片描述

模型构建

import torch
from torch import nn
from d2l import torch as d2l

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))

看看每层情况

X = torch.rand(size=(1, 1, 28, 28), dtype=torch.float32)
for layer in net:
    X = layer(X)
    print(layer.__class__.__name__,'output shape: \t',X.shape)
Conv2d output shape: 	 torch.Size([1, 6, 28, 28])
Sigmoid output shape: 	 torch.Size([1, 6, 28, 28])
AvgPool2d output shape: 	 torch.Size([1, 6, 14, 14])
Conv2d output shape: 	 torch.Size([1, 16, 10, 10])
Sigmoid output shape: 	 torch.Size([1, 16, 10, 10])
AvgPool2d output shape: 	 torch.Size([1, 16, 5, 5])
Flatten output shape: 	 torch.Size([1, 400])
Linear output shape: 	 torch.Size([1, 120])
Sigmoid output shape: 	 torch.Size([1, 120])
Linear output shape: 	 torch.Size([1, 84])
Sigmoid output shape: 	 torch.Size([1, 84])
Linear output shape: 	 torch.Size([1, 10])

fashion_mnist数据集

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

在GPU上进行训练

def evaluate_accuracy_gpu(net, data_iter, device=None): #@save
    """使用GPU计算模型在数据集上的精度"""
    if isinstance(net, nn.Module):
        net.eval()  # 设置为评估模式
        if not device:
            device = next(iter(net.parameters())).device
    # 正确预测的数量,总预测的数量
    metric = d2l.Accumulator(2)
    with torch.no_grad():
        for X, y in data_iter:
            if isinstance(X, list):
                # BERT微调所需的(之后将介绍)
                X = [x.to(device) for x in X]
            else:
                X = X.to(device)
            y = y.to(device)
            metric.add(d2l.accuracy(net(X), y), y.numel())
    return metric[0] / metric[1]
#@save
def train_ch6(net, train_iter, test_iter, num_epochs, lr, device):
    """用GPU训练模型(在第六章定义)"""
    def init_weights(m):
        if type(m) == nn.Linear or type(m) == nn.Conv2d:
            nn.init.xavier_uniform_(m.weight)
    net.apply(init_weights)
    print('training on', device)
    net.to(device)
    optimizer = torch.optim.SGD(net.parameters(), lr=lr)
    loss = nn.CrossEntropyLoss()
    animator = d2l.Animator(xlabel='epoch', xlim=[1, num_epochs],
                            legend=['train loss', 'train acc', 'test acc'])
    timer, num_batches = d2l.Timer(), len(train_iter)
    for epoch in range(num_epochs):
        # 训练损失之和,训练准确率之和,样本数
        metric = d2l.Accumulator(3)
        net.train()
        for i, (X, y) in enumerate(train_iter):
            timer.start()
            optimizer.zero_grad()
            X, y = X.to(device), y.to(device)
            y_hat = net(X)
            l = loss(y_hat, y)
            l.backward()
            optimizer.step()
            with torch.no_grad():
                metric.add(l * X.shape[0], d2l.accuracy(y_hat, y), X.shape[0])
            timer.stop()
            train_l = metric[0] / metric[2]
            train_acc = metric[1] / metric[2]
            if (i + 1) % (num_batches // 5) == 0 or i == num_batches - 1:
                animator.add(epoch + (i + 1) / num_batches,
                             (train_l, train_acc, None))
        test_acc = evaluate_accuracy_gpu(net, test_iter)
        animator.add(epoch + 1, (None, None, test_acc))
    print(f'loss {train_l:.3f}, train acc {train_acc:.3f}, '
          f'test acc {test_acc:.3f}')
    print(f'{metric[2] * num_epochs / timer.sum():.1f} examples/sec '
          f'on {str(device)}')
lr, num_epochs = 0.9, 10
train_ch6(net, train_iter, test_iter, num_epochs, lr, d2l.try_gpu())
loss 0.457, train acc 0.830, test acc 0.826
6925.9 examples/sec on cuda:0

在这里插入图片描述

pytorch学习笔记(二十三):卷积神经网络(LeNet) LeNet 使用多层感知机构造一个含单隐藏层的多层感知机模型来对Fashion-MNIST数据集中的图像进行分类。每张图像高和宽均是28像素。我们将图像中的像素逐行展开,得到长度为784的向量,并输入进全连接层中。然而,这种分类方法有一定的局限性。 图像在同一列邻近的像素在这个向量中可能相距较远。它们构成的模式可能难以被模型识别。 对于大尺寸的输入图像,使用全连接层容易造成模型过大。假设输入是高和宽均为1000像素的彩色照片(含3个通道)。即使全连接层输出个数仍是256,该层权重参数的形状是3,000,0 阅读详情

相关推荐

从代码学习深度学习-卷积神经网络(LeNet) PyTorch版

卷积神经网络(Convolutional Neural Network, CNN)是深度学习领域的核心技术之一,尤其在图像处理任务中表现出色。LeNet 是由 Yann LeCun 等人于 1989 年提出的早期 CNN 模型,尽管结构简单,却为现代深度学习奠定了基础。本文将通过 PyTorch 实现 LeNet-5,并结合 Fashion-MNIST 数据集进行训练和评估,帮助读者从代码角度理解 CNN 的工作原理。本文将分步展示数据加载、模型定义、训练过程及可视化工具的实现,代码均配有详细注释。

weixin_43887510的博客 1343

经典神经网络(1)LeNet及其在Fashion-MNIST数据集上的应用

LeNet详解、pytorch代码实现,及其在Fashion-MNIST数据集上的应用

qq_44665283的博客 2539

PyTorch——LeNet实现(附完整代码)

参考链接 https://tangshusen.me/Dive-into-DL-PyTorch/#/chapter05_CNN/5.5_lenet LeNet LeNet分为卷积层块和全连接层块两个部分。 卷积层块里的基本单位是卷积层后接最大池化层:卷积层用来识别图像里的空间模式,如线条和物体局部,之后的最大池化层则用来降低卷积层对位置的敏感性。在卷积层块中,每个卷积层都使用5×5的窗口,并在输出上使用sigmoid激活函数。第一个卷积层输出通道数为6,第二个卷积层输出通道数则增加到16。这是因为第二个

beilizhang的博客 1万+

卷积神经网络(LeNet)识别Fashion-MNIST数据集(Pytorch版)

卷积神经网络(LeNet)识别Fashion-MNIST数据集(Pytorch版)1. 前言1.1 案例介绍1.2 环境配置1.3 模块导入2. 图像数据准备2.1 训练验证集的准备2.2 测试集的准备3. 卷积神经网络的搭建4. 卷积神经网络训练与预测5. 运行程序 1. 前言 1.1 案例介绍 本案例使用Pytorch搭建一个类似LeNet-5的网络结构,用于Fashion-MNIST数据集的图像分类。针对该问题的分析可以分为数据准备、模型建立以及使用训练集进行训练和使用测试集测试模型的效果。 1.2

Rome was not built in a day. 7480

告别反复刷写:用英飞凌XCP Overlay功能实现ECU标定与诊断的‘热更新’

本文详细介绍了英飞凌XCP Overlay功能在ECU标定与诊断中的应用,实现参数的'热更新',避免反复刷写Flash。通过地址重映射技术,将标定变量从Flash重定向到RAM,显著提升工作效率并保护Flash寿命。文章涵盖技术原理、工程实践、功能安全考量及高级应用场景,为汽车电子工程师提供完整解决方案。

weixin_30689307的博客 527

XY2-100协议解析

1.XY2-100包括四路信号 : SENDCK(时钟信号)、SYNC(同步信号)、CHANNELX(X通道)、CHANNELY(Y通道)

qq_38360574的博客 9533

P23 LeNet经典神经网络模型

LeNet(LeNet-5) 由两个部分组成:卷积编码器和全连接层密集块 import torch from matplotlib import pyplot as plt from torch import nn from d2l import torch as d2l class Reshape(torch.nn.Module): #原始输入是32*32 def forward(self,x): return x.view(-1,1,28,28) #28*28的图.

湖心亭看雪 529

PET,CT图像融合笔记

PET-CT怎样进行图像融合?图像融合实现CT与PET图像的融合 OpenCV实现(附实验结果)

chenran187906的博客 8411

PyTorch 02:通过 PyTorch 构建神经网络

深度学习网络一般量级都很大,包含数百个层级,这也是为什么叫“深度”学习网络。你可以像在上个 notebook 展示的一样,仅使用权重矩阵构建深度网络,但是这通常很繁琐并且不好实施。PyTorch 有一个很方便的模块 nn,可以有效地构建大型神经网络。 # Import necessary packages %matplotlib inline %config InlineBackend.figure_format = 'retina' import numpy as np import torch i

科学边界 861

【OpenClaw从入门到精通】第35篇:电商“龙虾”掘金记——用OpenClaw实现小红书/抖音/淘宝全自动矩阵运营(2026实测版)

2026年,OpenClaw智能体已成为电商运营的“效率革命工具”,其多平台自动化能力让单人可完成传统3-5人的工作量。本文基于真实商业案例(来源:海报新闻、阿里云开发者社区等),系统拆解OpenClaw在小红书、抖音、淘宝的全链路运营方案:从阿里云部署搭建基础环境,到三大平台核心技能安装配置,再到跨平台矩阵工作流落地;同时揭秘代部署、模板售卖、轻定制、内容套利四大变现模式,并详解Token成本控制、安全风险规避等关键问题。文中所有代码均经过2026年3月实测验证,提供完整可复现的技术方案,帮助读者快速搭建

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 2048

YOLO26 多模态融合技术:RGB+红外/深度/雷达融合

YOLO(You Only Look Once)是一种流行的目标检测算法,其最大特点是快速且端到端地完成图像中所有目标的检测与分类任务。YOLO首次在2016年由Joseph Redmon等人提出,彻底改变了传统目标检测(如R-CNN系列)的思路,被广泛应用于自动驾驶、视频监控、工业质检等场景。

一键难忘的博客 3523

LeNet网络实现训练fashion-mnist数据集

LeNet作为现在各种卷积神经网络的始祖,其网络结构虽然只有7层,却包含了卷积神经网络的基本组件,具体关于LeNet详解请参考:https://blog.csdn.net/qq_42570457/article/details/81460807 今天我们来实现如何不需要调参就可以提高LeNet在数据集fashion-mnist上的训练精度和测试精度。 所用代码为李沐所编写的《动手学深度学习》https://zh-v2.d2l.ai/inde...

小刘研CV的博客 2401

USB2.0协议解读

就写到这吧,其他协议层等属于软件需要了解的东西了。简单看了下,本文总结的有点乱,有两个原因吧,其一是理解的不够透彻,无法用简单明了的语言总结;其二是感觉这个协议文档章节划分的也不是很好,有点大杂烩。

qflook的博客 3673

卷积神经网络(LeNet5实现对Fashion_MNIST分类

本次实验旨在探索卷积神经网络在Fashion_MNIST数据集上的应用,以经典的LeNet-5模型为基础进行分类任务。在实验过程中,我逐步优化了模型架构,并对比了不同模型的性能表现,以达到更好的分类准确率。首先,Fashion_MNIST数据集包含10个类别的衣物和配饰图像,每个类别包含7000张28x28像素的灰度图像。我采用了LeNet-5模型作为初始模型架构,该模型包含了卷积层、池化层和全连接层,经典简洁。随后,在训练过程中我注意到模型的性能不尽如人意,于是尝试了调整参数和模型架构。

qq_55552561的博客 1810

锂电池的充电和放电曲线解读

锂电池充放电曲线是反映其性能的关键指标。充电曲线分为恒流和恒压两阶段:恒流阶段电压快速上升,恒压阶段电流逐渐降低;放电曲线则呈现平台期和快速衰减期特征。这些曲线受温度、充放电倍率及材料体系(如三元锂或磷酸铁锂)显著影响。通过分析曲线特征,可优化电池管理系统,实现精准的SOC估算、快充策略制定及故障诊断,从而在电池性能与安全性间取得平衡。不同应用场景(如新能源汽车或消费电子)对曲线形态有特定要求。

start_up_go的博客 5067

大数据开发工程师必备面试题与解答

大数据开发岗位一直是互联网行业的热门方向,面试过程中既考察基础知识,也关注实际项目经验和问题解决能力。本文整理了等核心组件相关的高频面试题及参考解答,帮助大家高效准备面试。大数据面试不仅考察基础理论,更看重项目经验与问题解决能力。本文涵盖了等核心知识点及调优思路,希望能帮助你在面试中游刃有余。

X2829352498的博客 302

【深度学习】:《PyTorch入门到项目实战》卷积神经网络2-5:LeNet、AlexNet、VGG

我们介绍了三种经典的卷积神经网络架构:`LeNet,AlexNet,VGG`。他们的共同思想都是使用卷积层来学习图片的空间信息,提取特征,最后使用全连接层转换到我们要的分类空间。 LeNet是首个成功应用在手写数字识别数据集上的深度卷积神经网络,只有2个卷积层、两个池化层和三个全连接层 AlexNet在LeNet基础上使用了更多更深的卷积层,在2012年的ImageNet比赛上一战成名,从此引领了深度学习的浪潮 VGG在AlexNet的基础上构建了一个非常深的卷积神经网络,通过堆叠多个VGG块实现

阿里云专家博主、数据科学领域优质创作者、统计er在读 1万+

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

【PyTorch】卷积神经网络LeNet5-训练Fashion-MNIST

使用fashion-MNIST演示PyTorch实现卷积神经网络LeNet5的创建、训练和测试 导入依赖包 import torch import torch.nn as nn import torchvision import torch.utils.data as Data import torchvision.transforms as transforms import sys 加载数据集 mnist_train = torchvision.datasets.FashionMNIST(root='

qq_19655645的博客 1935

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

基于 PyTorch 的 Fashion-MNIST CNN 分类模型

本文介绍了使用PyTorch实现基于CNN的Fashion-MNIST图像分类任务。主要内容包括:1)数据预处理,将CSV格式数据转换为28×28张量;2)构建LeNet风格CNN模型,包含两个卷积层和三个全连接层;3)采用Xavier初始化优化参数;4)使用交叉熵损失和SGD优化器进行训练;5)实现了完整的训练循环,包括实时监控训练/验证指标;6)提供单样本预测和可视化功能。该实现展示了从数据处理到模型部署的完整深度学习流程,可作为图像分类任务的参考模板。

qq_54918419的博客 513

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

动手学深度学习6.6 卷积神经网络(LeNet)-笔记&练习(PyTorch)

李沐老师《动手学深度学习(PyTorch版)》6.6 卷积神经网络(LeNet)-笔记&练习详解

scdifsn的博客 2074

动手学深度学习(十八)——LeNet:CNN经典网络(一)

文章目录1. 卷积神经网络(LeNet)发展2. LeNet网络结构3. 代码实现(将LeNet应用在简单的Fashion-MNIST上)3.1 导入相关包3.2 网络结构定义及验证3.3 模型训练3.4 训练结果 讲解LeNet的材料比较多,这个blog的内容主要是李沐老师《动手学深度学习V2》课程的markdown文件,理论主要是摘录的老师的文字,主要是为了自己过一边基础,代码部分是重写的。 LeNet还是比较简单的,根据目录跳转到自己想看的部分吧! 1. 卷积神经网络(LeNet)发展 LeNet,它

Liu Feng's Blog 3753

LeNet (经典卷积神经网络) + 代码实现 ——笔记2.10《动手学深度学习》

小结 卷积神经网络(CNN)是一类使用卷积层的网络。 在卷积神经网络中,我们组合使用卷积层、非线性激活函数和汇聚层。 为了构造高性能的卷积神经网络,我们通常对卷积层进行排列,逐渐降低其表示的空间分辨率,同时增加通道数。 在传统的卷积神经网络中,卷积块编码得到的表征在输出之前需由一个或多个全连接层进行处理。 LeNet是最早发布的卷积神经网络之一。

科研汪小陈的主页:https://chensuzeyu.github.io 1610

PyTorch深度学习进阶(一)(经典卷积神经网络 LeNet)

本次进阶笔记将以为基础,主要针对特殊的深度学习网络结构(如Transformer等)与一些进阶操作并结合我自身需要,对基础版笔记起到提升和补充作用。

gaoyangdd的博客 1153

【CNN】经典网络LeNet——最早发布的卷积神经网络之一

LeNet主要的出现契机是手写数字的识别,并在邮政和银行发挥了非常重要的角色。但是,这个网络在当时流行度没那么高,但是知名度最高的还是MNIST数据集。所有的都是黑白图。对于LeNet,总体来看,卷积编码层:由两个卷积层组成全连接密集块:由是哪个全连接层组成架构图如下图所示:输入的是28 * 28的单通道图片 得到6输出通道的28 * 28的, 通过池化层,得到6通道14 * 14的特征图,最后通过卷积操作得到16输出通道的特征图,在通过池化得到16通道的5 * 5。

写写平时的技术与感想 4486

【李沐 | 动手学深度学习】10-5 卷积-LeNet

LeNet-5是卷积神经网络的开山之作,由Yann LeCun于1998年提出,最初用于手写数字识别。这个7层网络采用卷积-池化-全连接的经典架构,包含两个卷积层、两个池化层和三个全连接层,使用Sigmoid激活和平均池化。虽然与现代CNN相比结构简单(如使用浅层网络、小数据集),但它确立了CNN的基本范式,包括局部连接、权值共享等核心思想。代码实现展示了其在Fashion-MNIST数据集上的应用,通过GPU训练可获得较好效果。LeNet-5的重要意义在于开创了端到端视觉任务学习的先河,为后续AlexNe

m0_74045201的博客 875

深度学习案例分享 | PyTorch 实现 Fashion-MNIST 服装数据分类

pytoch 实现 Fashion-MNIST 服装数据分类

m0_60001307的博客 1288
上一篇: 【动手学习pytorch笔记】9.卷积神经网络基础(卷积层,填充和步长,多输入输出通道,池化层)
下一篇: 【动手学习pytorch笔记】11.AlexNet分类fashion_mnist
YMK_0
博客等级 码龄10年 78粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值