通过MNIST手写数字识别任务快速入门深度学习(事无巨细版)

可点此跳转看全篇

本文内容

  • 什么是深度学习
  • 入门深度学习时的困惑
  • 典型的入门案例——CNN实现的MNIST手写数字识别
    • 虚拟环境的创建
      • 创建虚拟环境
      • 配置需求的依赖包
    • 代码
      • 1. 引入依赖包
      • 2. 准备数据集datasets
      • 3. 准备数据加载器dataloader
      • 4. 配置网络
      • 5. 设置训练器
      • 6. 网络训练
      • 7. 模型保存
      • 8. 加载和测试模型

公众号

什么是深度学习

深度学习(DL, Deep Learning)是机器学习(ML, Machine Learning)领域中一个研究方向。
深度学习通过对样本数据的内在规律和特征的提取与抽象,在不同维度和层次上进行处理,让机器能够像人一样具有分析学习能力,能够识别文字、图像和声音等数据。
相比于初期的机器学习,深度学习是更加复杂的算法,但是同时因为深度学习算法的普适性,以及在语音和图像识别方面取得的惊人效果,他的发展速度远远超过先前相关技术。

入门深度学习时的困惑

很多同学刚入门的时候,会对代码中的网络主体在哪里,是怎么训练的,以及训练完如何保存,保存后如何使用等问题产生疑惑。这些问题会随着阅览的代码增多而自然化解。我们先从简单的开始:如何跑起来一个神经网络。

典型的入门案例——CNN实现的MNIST手写数字识别

废话不多说,直接通过MNIST手写识别快速入门深度学习。对于手写识别任务,目前已经能够被很轻松的解决。

虚拟环境的创建

创建虚拟环境

为了不使python环境变的混乱,我们使用conda工具创建虚拟python环境,每个虚拟环境之间是隔离的。具体的conda环境安装网上已经有很多教程,很多博主都写的很详细,这里就不展开了。我们直接使用conda工具创建一个新的python环境
conda create -n mnist_pytorch python=3.8
这句创建一个名字为mnist_pytorch,python版本为3.8的虚拟环境,使用如下命令激活环境
conda activate mnist_pytorch

配置需求的依赖包

conda install pytorch==2.0
conda install torchvision==0.15.1
除了会安装pytorch意外,还会自动配置相关的依赖包,比如numpy等。其他的库也会进行安装,如果没有找到对应的库,可以参考后面的安装命令重新来一次。
还需继续安装PIL的库:pillow,没错,import的名字和他的库名并不相同。
pip install pillow
安装画图的库
pip install matplotlib,python库os在安装python环境的时候,就会根据操作系统进行自动配置。

代码

1. 引入依赖包

首先我们需要如下的python包import

import numpy as np
import torch 
from torch import nn
from PIL import Image
import matplotlib.pyplot as plt
import os
from torchvision import datasets, transforms,utils

其中:

  • numpy是python著名以及普遍使用的第三方库,用于进行科学计算
  • PIL全名为Python Image Library,用于图像的处理
  • matplotlib是python中普遍使用的绘图库,而pyplot是其一种快捷的绘图接口
  • os为python提供了丰富的方法来处理文件和目录
  • torchvision通过这个库,我们能够实现很多经典数据集的下载,包括COCO,ImageNet,CIFCAR等,当然也包括我们的这个MNIST。

2. 准备数据集datasets

MNIST数据集是一张张黑底白字的手写体图片,大小均为28 × \times × 28。如下在这里插入图片描述

按照下面的代码取出的每一个数据都是:{ 图片, 数字 } 的组合。
运行以下的代码

# 1
transform = transforms.Compose([transforms.ToTensor(),
                               transforms.Normalize(mean=[0.5],std=[0.5])])
# 2
train_data = datasets.MNIST(root = "./data/",
                            transform=transform,
                            train = True,
                            download = True)
# 3
test_data = datasets.MNIST(root="./data/",
                           transform = transform,
                           train = False)

我们使用torchvision库中提供的方法,把MNIST数据下载到本地并分为测试集和训练集。每一句的作用解释如下:

  • 第一句指定了数据集预处理的方案,在上述代码中,制定了将数据转变为tensor()格式,可以理解这是pytorch中的矩阵;并且将数值归一化,指定均值和标准差均为0.5。数据的标准化或者说是归一化是神经网络数据预处理中经常采用的方式,能够剔除数据中的极端情况,并且有利于模型训练过程的收敛。
  • 第二、三句通过引入torchvision中的datasets方法,指定MNIST数据集的位置,这里指定为和当前程序文件同一文件夹下的data文件夹,指定预处理方法为第一句设定的transform,然后训练集将train设定为true,测试集设定为false。第一个的download选项指定了如果没有在该路径下找到数据,那么会自动下载到该路径。
    由于没有实现下载数据集,代码运行后有输出:
    在这里插入图片描述

运行完代码后,我们会得到以下的文件树:
在这里插入图片描述

3. 准备数据加载器dataloader

# 1
train_loader = torch.utils.data.DataLoader(train_data,batch_size=64,
                                          shuffle=True

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

URL?后参数有特殊字符问题

前端对于URL的参数不做处理 不处理、用URLDecoder.decode()处理、用URLEncoder.encode()处理、用URLEncoder.encode()处理后再用URLDecoder.decode()处理 结果 前端对于URL的参数用encodeURIComponent(‘XF-OPPZZD-26*316’)处理 结果 前端不处理有&字符时 结果会把后…

【PyQt】16-剪切板的使用

文章目录 前言一、代码疑惑快捷键 二、现象2.1 复制粘贴文本复制粘贴 2.2 复制粘贴图片复制粘贴 2.3 复制粘贴网页 总结 前言 1、剪切板的使用 2、pycharm的编译快捷键 3、类的属性和普通变量的关系 4、pyqt应该养成的编程习惯-体现在代码里了,自己看看。 一、代码…

CTP-API开发系列之四:接口对接准备

CTP-API开发系列之四:接口对接准备 CTP-API开发系列之四:接口对接准备CTP-API文件清单CTP-API通用规则命名规则Spi与Api CTP-API通讯模式开发语言选择 CTP-API开发系列之四:接口对接准备 CTP-API文件清单 文件名说明ThostFtdcTraderApi.h交…

护眼台灯推荐,护眼台灯怎么选?口碑公认的5个品牌推荐

现在儿童青少年的近视率越来越高,所以儿童护眼台灯也是受到了越来越多的关注。护眼台灯凭借能提供舒适自然的照明,起到预防近视的作用,成为了许多家长为孩子选择的必备灯具!不过市场上始终存在护眼台灯质量差、不达到标准等各种负…

新闻资讯|基于微信小程序的经济新闻资讯系统设计与实现(源码+数据库+文档)

新闻资讯小程序目录 目录 基于微信小程序的经济新闻资讯系统设计与实现 一、前言 二、系统设计 三、系统功能设计 1、用户信息管理 2 短视频信息管理 3、新闻信息管理 4、论坛信息管理 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设…

实战-Sealos一键部署k8s集群-2024.3.7(测试成功)

目录 [toc] 原文链接 实战-Sealos一键部署k8s集群-2024.3.7(测试成功) | 彦 推荐文章 我的开源项目: 开源项目 | 彦 实验环境 centos7.6 1810,5.4.270-1.el7.elrepo.x86_64sealos v5.0.0-beta4k8s v1.28.7 (当前时间:2024年3月7日 k8s最新版…

前端语义化标签及实例

常用的语义化标签的以下几种&#xff1a; header、nav、article、section、aside、footer、abbr、dfn、address、del、ins、pre、meter、progress <header> 定义文章的页眉信息 <header><h1>我的网站标题</h1><nav><ul><li><a …

从零开始学习Diffusion Models: Sharon Zhou

How Diffusion Models Work 本文是 https://www.deeplearning.ai/short-courses/how-diffusion-models-work/ 这门课程的学习笔记。 文章目录 How Diffusion Models WorkWhat you’ll learn in this course [1] Intuition[2] SamplingSetting Things UpSamplingDemonstrate i…

Optional 详解

Optional 详解 1、Optional 介绍2、创建 Optional 对象3、Optional 常用方法1. 判断值是否存在 — isPresent()2. 非空表达式 — ifPresent()3. 设置(获取)默认值 — orElse()、orElseGet()4. 获取值 — get()5. 过滤值 — filter()6. 转换值 — map() 作为一名 Java 程序员&am…

ISP基础概述

原文来自ISP 和摄像头基本知识 本文主要介绍ISP&#xff0c;以供读者能够理解该技术的定义、原理、应用。 &#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &#x1f4cb;个人专栏&#xff1a;计算机杂记 &#x1f380;CSDN主页 发狂的小花 &#x1f3…

【短时交通流量预测】基于小波神经网络WNN

课题名称&#xff1a;基于小波神经网络的短时交通流量预测 版本时间&#xff1a;2023-04-27 代码获取方式&#xff1a;QQ&#xff1a;491052175 或者 私聊博主获取 模型简介&#xff1a; 城市交通路网中交通路段上某时刻的交通流量与本路段前几个时段的交通流量有关&#x…

登录校验-过滤器-拦截器

会话技术 会话&#xff1a;用户打开浏览器&#xff0c;访问Wb服务器的资源&#xff0c;会话建立&#xff0c;直到有一方断开连接&#xff0c;会话结束。在一次会话中可以包含多次请求和响应。 会话跟踪&#xff1a;一种维护浏览器状态的方法&#xff0c;服务器需要识别多次请求…

upload-Labs靶场“11-15”关通关教程

君衍. 一、第十一关 %00截断GET上传1、源码分析2、%00截断GET上传 二、第十二关 %00截断POST上传1、源码分析2、%00截断POST上传 三、第十三关 文件头检测绕过1、源码分析2、文件头检测绕过 四、第十四关 图片检测绕过上传1、源码分析2、图片马绕过上传 五、第十五关 图片检测绕…

腾讯云和阿里云哪个好?云服务器价格表对比

2024年阿里云服务器和腾讯云服务器价格战已经打响&#xff0c;阿里云服务器优惠61元一年起&#xff0c;腾讯云服务器62元一年&#xff0c;2核2G3M、2核4G、4核8G、8核16G、16核32G、16核64G等配置价格对比&#xff0c;阿腾云atengyun.com整理阿里云和腾讯云服务器详细配置价格表…

C# LINQ运算符

LINQ运算符 1. 概述1.1 集合->集合1.1.1 筛选运算符1.1.2 映射运算符1.1.3 连接运算符1.1.4 排序运算符1.1.5 分组运算符1.1.6 集合运算符1.1.7 转换方法:Import1.1.8 转换方法:Export 1.2 集合->单个元素或标量值1.2.1 元素运算符1.2.2 聚合方法1.2.3 数量词 1.3 空->…

1910_野火FreeRTOS教程阅读笔记_prvStartFirstTask函数

1910_野火FreeRTOS教程阅读笔记_prvStartFirstTask函数 全部学习汇总&#xff1a; g_FreeRTOS: FreeRTOS学习笔记 这是教程中的一个函数&#xff0c;通过汇编来实现的。注释部分以及结合后面的讲解部分&#xff0c;可能还是有一点点细节的地方让初学者疑惑。我结合我自己的理解…

龙格-库塔法

概要 微分方程&#xff1a;含参数、未知函数、未知函数的导数&#xff08;或者微分&#xff09;的方程数值求解&#xff1a;用若干离散点计算 近似值 来代替准确值分类&#xff1a;单步法、多步法&#xff1b;隐式法、显示法欧拉法 (欧拉折线法)&#xff0c;也是一阶龙格-库塔…

【数据结构】图解二叉搜索树的新增、搜索、删除

一、概念 二叉搜索树&#xff08;Binary Search Tree&#xff0c;简称BST&#xff09;也称为二叉查找树或二叉排序树&#xff0c;是一种具有特殊性质的二叉树数据结构。 定义和性质&#xff1a; 二叉搜索树中的每个节点包含一个键值&#xff0c;习惯上我们说左子树上所有节点…

乔琼:高性能会议传声器的产品优化设计| 演讲嘉宾公布

一、智能家居与会议系统 智能家居与会议系统分论坛将于3月28日同期举办&#xff01; 智能会议系统它通过先进的技术手段&#xff0c;提高了会议效率&#xff0c;降低了沟通成本&#xff0c;提升了参会者的会议体验。对于现代企业、政府机构和学术界是不可或缺的。在这里&#x…

部署运维 防火墙,进程 常用命令

防火墙: 1. 查看是否安装了firewalld sudo systemctl status firewalld 查看防火墙状态或者sudo systemctl is-active firewalld 查看防火墙是否是开启状态 2. 开放6379port sudo firewall-cmd --add-port6379/tcp --permanent 刷新防火墙 sudo firewall-cmd --reload 3…