【深度学习】MNIST手写数字数据集的分类识别

news2024/12/30 3:32:03

请添加图片描述


👉博__主👈:米码收割机
👉技__能👈:C++/Python语言
👉公众号👈:测试开发自动化【获取源码+商业合作】
👉荣__誉👈:阿里云博客专家博主、51CTO技术博主
👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。


MNIST手写数字数据集的分类识别


目录

  • MNIST手写数字数据集的分类识别
  • 1. 目的及目标
  • 2. 代码实现
  • 3. 代码功能描述
  • 关键点
  • 内容简介
  • 作者简介
  • 购买连接


1. 目的及目标

目的:为了实现对MNIST手写数字数据集的分类识别。

目标:

  1. 构建模型:使用PyTorch库定义并构建一个简单的深度学习模型(在这种情况下是一个全连接的多层感知器,MLP)。

  2. 训练模型:通过反复地在MNIST训练数据上迭代,调整模型的权重,使其能够正确分类手写数字。

  3. 评估模型:在每轮训练结束后,评估模型在MNIST测试集上的性能,以检查其泛化能力并了解其在未见过的数据上的表现。


2. 代码实现

我们可以了解到如何使用PyTorch建立、训练和评估一个基本的深度学习模型。实现一个基本的深度学习网络,我们可以使用Python的TensorFlow或PyTorch库。

首先,确保你安装了torchtorchvision

pip install torch torchvision

深度神经网络实现,用于处理手写数字识别(MNIST数据集):

import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
from torchvision import datasets, transforms

# 定义神经网络模型
class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.fc1 = nn.Linear(28*28, 500)
        self.fc2 = nn.Linear(500, 256)
        self.fc3 = nn.Linear(256, 10)

    def forward(self, x):
        x = x.view(-1, 28*28)  # 将输入扁平化
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        x = self.fc3(x)
        return F.log_softmax(x, dim=1)

# 加载数据
transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.5,), (0.5,))])
train_dataset = datasets.MNIST('./data', train=True, download=True, transform=transform)
train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=64, shuffle=True)

test_dataset = datasets.MNIST('./data', train=False, download=True, transform=transform)
test_loader = torch.utils.data.DataLoader(test_dataset, batch_size=1000, shuffle=False)

# 创建模型、优化器和损失函数
model = Net()
optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.9)
criterion = nn.CrossEntropyLoss()

# 训练模型
def train(epoch):
    model.train()
    for batch_idx, (data, target) in enumerate(train_loader):
        optimizer.zero_grad()
        output = model(data)
        loss = criterion(output, target)
        loss.backward()
        optimizer.step()
        if batch_idx % 100 == 0:
            print('Train Epoch: {} [{}/{} ({:.0f}%)]\tLoss: {:.6f}'.format(
                epoch, batch_idx * len(data), len(train_loader.dataset),
                100. * batch_idx / len(train_loader), loss.item()))

# 测试模型
def test():
    model.eval()
    test_loss = 0
    correct = 0
    with torch.no_grad():
        for data, target in test_loader:
            output = model(data)
            test_loss += criterion(output, target).item()
            pred = output.argmax(dim=1, keepdim=True)
            correct += pred.eq(target.view_as(pred)).sum().item()

    test_loss /= len(test_loader.dataset)
    print('\nTest set: Average loss: {:.4f}, Accuracy: {}/{} ({:.0f}%)\n'.format(
        test_loss, correct, len(test_loader.dataset), 100. * correct / len(test_loader.dataset)))

for epoch in range(1, 11):  # 训练10轮
    train(epoch)
    test()

这是一个简单的三层全连接网络,它用于MNIST手写数字识别。可以通过调整网络结构、参数和训练次数来进一步优化模型。


3. 代码功能描述

  1. 数据加载和预处理:代码使用torchvision库加载MNIST手写数字数据集,并对数据进行简单的归一化处理。

  2. 定义神经网络模型:定义了一个简单的三层全连接网络(多层感知器,MLP)来对手写数字进行分类。

  3. 定义训练函数train函数执行以下操作:

    • 设置模型为训练模式。
    • 在数据加载器train_loader中遍历每个批次的数据。
    • 对每个批次的数据执行前向传播。
    • 计算损失(使用交叉熵损失函数)。
    • 执行反向传播。
    • 使用SGD优化器更新网络权重。
  4. 定义测试函数test函数执行以下操作:

    • 设置模型为评估模式。
    • 在数据加载器test_loader中遍历每个批次的数据。
    • 对每个批次的数据执行前向传播。
    • 计算损失和预测准确性。
  5. 模型训练和评估:循环训练模型10轮,并在每轮结束时评估模型在测试数据上的性能。

总的来说,这段代码的主要功能是使用一个简单的深度学习模型(全连接网络)来进行手写数字识别。模型在MNIST数据集上进行训练,并在每轮训练后评估其在测试集上的性能。


本期好书推荐 《用ChatGPT轻松玩转机器学习与深度学习》

请添加图片描述

突破传统学习束缚,借助ChatGPT的神奇力量,解锁AI无限可能!

关键点

(1)利用ChatGPT,轻松理解机器学习和深度学习的概念和技术。
(2)提供实用经验和技巧,更好地掌握机器学习和深度学习的基本原理和方法。
(3)系统全面、易于理解,不需要过多的数学背景,只需掌握基本的编程知识即可上手。


内容简介

随着机器学习和深度学习技术的不断发展和进步,它们的复杂性也在不断增强。对于初学者来说,学习这两个领域可能会遇到许多难题和挑战,如理论知识的缺乏、数据处理的困难、算法选择的不确定性等。此时,ChatGPT可以提供强有力的帮助。利用ChatGPT,读者可以更轻松地理解机器学习和深度学习的概念和技术,并解决学习过程中遇到的各种问题和疑惑。此外,ChatGPT还可以为读者提供更多的实用经验和技巧,帮助他们更好地掌握机器学习和深度学习的基本原理和方法。本书主要内容包括探索性数据分析、有监督学习(线性回归、SVM、决策树等)、无监督学习(降维、聚类等),以及深度学习的基础原理和应用等。
本书旨在为广大读者提供一个系统全面、易于理解的机器学习和深度学习入门教程。不需要过多的数学背景,只需掌握基本的编程知识即可轻松上手。


作者简介

段小手,曾供职于百度、敦煌网、慧聪网、方正集团等知名IT企业。有多年的科技项目管理及开发经验。负责的项目曾获得“国家发改委电子商务示范项目”“中关村现代服务业试点项目”“北京市信息化基础设施提升专项”“北京市外贸公共服务平台”等多项政策支持。著有《深入浅出Python机器学习》《深入浅出Python量化交易实战》等著作,在与云南省公安厅合作期间,使用机器学习算法有效将某类案件发案率大幅降低。


购买连接

当当网链接:http://product.dangdang.com/29610425.html
京东的链接:https://item.jd.com/14092188.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1084264.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用docker安装db2

使用docker安装db2 1. 前言1.1 关于docker的安装1.2 安装db2版本选择参考 2. 拉取镜像3. 启动镜像4. 进入容器,切换用户4.1 进入容器4.2 切换用户4.3 其他命令 5. 可视化工具DBeaver连接db25.1 连接5.2 简单使用 1. 前言 1.1 关于docker的安装 关于Linux上docker的…

一些常用的兼容性测试方法和技巧

兼容性测试是软件开发过程中的重要环节,但如何进行有效的兼容性测试是一个需要关注的问题。下面将介绍一些常用的兼容性测试方法和技巧。 首先,要确定兼容性测试的范围。根据软件的特点和用户的需求,确定需要测试的操作系统、浏览器、分辨率…

【vue3】实现数据响应式(ref、shallowRef、trigger、reactive、shallowReactive、toRef、toRefs)

一、ref、shallowRef、trigger ref支持所有类型 可以粗略理解为 ref shallowRef triggerRef 1、通过ref获取dom元素 <p ref"_ref">这是ref获取dom元素</p>import {ref,shallowRef, triggerRef} from vueconst _ref ref()console.log(_ref.value?.i…

【Linux】提权问题

目录 一、设置白名单 一、设置白名单 当我们在使用sodo的时候&#xff0c;会发现我们的普通用户是无法用这个指令的&#xff0c;这个是因为这个普通用户还没有在root下是白名单里的用户 接下来我们来看一下怎样设置白名单用户 在root下打开配置文件vim /etc/sudoers 找到第100…

[硬件基础]-555定时器-非稳态多谐振荡器配置

555定时器-非稳态多谐振荡器配置 文章目录 555定时器-非稳态多谐振荡器配置1、概述2、非稳态多谐振荡器的内部工作原理 我们已经在之前的文章中介绍了 555 定时器的单稳态和双稳态操作。 在本文中&#xff0c;我们将讨论第三种配置 - 555 定时器的非稳定模式。 我们将了解如何在…

Apache atlas 元数据管理治理平台使用和架构

1、前言 Apache Atlas 是托管于 Apache 旗下的一款元数据管理和治理的产品&#xff0c;目前在大数据领域应用颇为广泛&#xff0c;可以很好的帮助企业管理数据资产&#xff0c;并对这些资产进行分类和治理&#xff0c;为数据分析&#xff0c;数据治理提供高质量的元数据信息。…

远控项目02:项目的创建以及git的配置

&#x1f482; 个人主页:pp不会算法v &#x1f91f; 版权: 本文由【pp不会算法v】原创、在CSDN首发、需要转载请联系博主 &#x1f4ac; 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦 c/MFC远程控制项目系列文章 1、在github创建仓库 2、在本地创建一个空文…

Vue-2.3v-model原理

原理&#xff1a;v-model本质上是一个语法糖&#xff0c;例如应用在输入框上&#xff0c;就是value属性和input事件的合写。 作用&#xff1a;提供数据的双向绑定 1&#xff09;数据变&#xff0c;视图跟着变:value 2&#xff09;视图变&#xff0c;数据跟着变input 注意&a…

PostMan环境变量、全局变量、动态参数使用

一、环境准备 postmanmoco [{"description": "登录认证","request": {"uri": "/login","method": "post","forms": {"user": "admin","password": "a123…

CentOS 7下JumpServer安装及配置(超详细版)

前言 Jumpserver是一种用于访问和管理远程设备的Web应用程序&#xff0c;通常用于对服务器进行安全访问。它基于SSH协议&#xff0c;提供了一个安全和可管理的环境来管理SSH访问。Jumpserver是基于Python开发的一款开源工具&#xff0c;其提供了强大的访问控制功能&#xff0c;…

Qt应用开发(基础篇)——表格视图 QTableView

一、前言 QTableView类继承于QAbstractItemView类&#xff0c;提供了一个表格视图的模型。 视图基类 QAbstractItemView QTableView默认为Model/View实现。 //绑定view和model QStandardItemModel *model new QStandardItemModel(); ui->tableView->setModel(model);//…

手把手教你写一个JSON在线解析的前端网站1

前言 作为一名Android开发&#xff0c;经常要跟后端同事联调接口&#xff0c;那么总避免不了要格式化接口返回值&#xff0c;将其转换为清晰直观高亮的UI样式以及折叠部分内容&#xff0c;方便我们查看定位关键的信息。 一直以来都是打开Google 搜索json格式化关键字&#xf…

【无标题】期权交易的实际操作流程是什么?

期权可以进行双向交易&#xff0c;即投资者认为期权后期会上涨&#xff0c;则可以通过交易软件进行做多买入认购操作&#xff0c;如果认为它后期会下跌&#xff0c;则可以通过交易软件件进行做空买入认沽操作&#xff0c;下文介绍期权交易的实际操作流程是什么&#xff1f; 期权…

2023年中国手机回收量、手机回收价值及行业细分现状分析[图]

手机回收的主要去向包括再销售及环保降解两类。其中进行再交易的二手手机多为9成新及以上手机。二手手机最终去向主要为再销售及环保降解。 2016年以来&#xff0c;我国手机总体出货量持续下滑&#xff0c;2022年全年&#xff0c;国内市场手机总体出货量累计2.72亿部&#xff0…

【代码随想录】算法训练营 第一天 第一章 数组 Part 1

数组基础知识补充 1. 在leecode中&#xff0c;数组一般是以vector容器的形式出现的&#xff0c;虽然vector的底层实现是array&#xff0c;但严格来讲vector是容器&#xff0c;不是数组&#xff1b; 2. 数组元素的删除和增添都需要移动后续元素&#xff0c;而且在实现的角度上…

C++初阶 入门

目录 1.用C的方式写一个Hello World 2.命名空间 2.1什么是命名空间&#xff1f; 2.2使用命名空间 3.C的输入输出 前言&#xff1a;C初阶系列&#xff0c;每一期博主都会使用简单朴素的语言将对应的知识分享给大家&#xff0c;争取让所有人都可以听懂&#xff0c;C初阶系列…

跨境电商迎来全球5日达革命?菜鸟全球化再提速!

近年来&#xff0c;随着全球化进程的加速和跨境电商的蓬勃发展&#xff0c;物流速度成为了电商行业的竞争制高点之一。消费者不再满足于等待数周&#xff0c;甚至数月的国际快递&#xff0c;他们期望能够像本地购物一样迅速收到国际包裹。 在这一背景下&#xff0c;跨境电商物…

众佰诚:开一家抖音小店需要交押金不?

随着电商行业的不断发展&#xff0c;越来越多的商家开始尝试在不同的平台上开设自己的店铺。抖音作为国内最热门的短视频平台之一&#xff0c;也吸引了众多商家的目光。那么&#xff0c;开一家抖音小店需要交押金吗?接下来&#xff0c;我们就来详细了解一下。 首先&#xff0c…

山西电力市场日前价格预测【2023-10-13】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2023-10-13&#xff09;山西电力市场全天平均日前电价为228.86元/MWh。其中&#xff0c;最高日前价格为396.88元/MWh&#xff0c;预计出现在18: 30。最低日前电价为0.00元/MWh&#xff0c;预计出…

TCP/IP(十二)TCP的确认、超时、重传机制

一 TCP的确认应答机制 确认应答机制: 每次收到数据 都会 给对端发送一个应答报文(ACK) ① 带重传的肯定确认 确认机制: 超时 重传的 肯定 确认 --> 完成了两个作用,或者说有两个含义1、肯定[正确] 确认小结&#xff1a; 我的确认信息是针对正确数据做确认,而不是错误…