【深度学习】从LeNet-5识别手写数字入门深度学习

2023-10-27

活动地址:CSDN21天学习挑战赛

LeNet模型

于1994年明确提出,变成推动深度学习培训发展趋势的驱动力。通过多次升级、不断,1988年Yann LeCun宣布取名为LeNet-5。LeNet-5模型如图所示。
在这里插入图片描述

搭建环境

这里我采用的是Pycharm + Anaconda(关于这俩的安装这里不在赘述)。

安装需要的包

打开Anaconda软件。步骤:【environments】-》【base(root)】-》【点击三角形】-》【Open Terminal】。
在这里插入图片描述
创建一个虚拟环境TF2.1 输入指令:conda create -n TF2.1 python==3.7
在这里插入图片描述
切换工作环境
在这里插入图片描述
下面这个图告诉如何去下载对应的包
在这里插入图片描述
在这里插入图片描述
这里列出了所有需要安装的包以及版本号

版本号
cudatoolkit 10.1
cudnn 7.6
tensorflow 2.1
matplotlib 3.2.1

创建工程

在这里插入图片描述

数据集

MNIST数据集(Mixed National Institute of Standards and Technology database)是美国国家标准与技术研究院收集整理的大型手写数字数据库,包含60,000个示例的训练集以及10,000个示例的测试集。
下载地址:http://yann.lecun.com/exdb/mnist/ 需要解压使用

相关代码

可以设置GPU训练(默认CPU)

import: 导包与C++中的include一样。
as: 起别名

import tensorflow as tf
gpus = tf.config.list_physical_devices("GPU")

if gpus:
    gpu0 = gpus[0] #如果有多个GPU,仅使用第0个GPU
    tf.config.experimental.set_memory_growth(gpu0, True) #设置GPU显存用量按需使用
    tf.config.set_visible_devices([gpu0],"GPU")

通过TensorFlow下载数据集

import tensorflow as tf
from tensorflow.keras import datasets, layers, models
import matplotlib.pyplot as plt

(train_images, train_labels), (test_images, test_labels) = datasets.mnist.load_data()

对数据进行归一化处理

常见的归一化方式有最值归一化(normalization)和均值方差归一化(standardization)

最值归一化(normalization)

把所有数据映射到0~1之间;只适用于有明显边间的情况,比如像素点中的像素值(0-255)。公式如下面2所示:
x_scale= (x- x_min)/(x_max- x_min )
注:x为数据集中每一种特征的值;将数据集中的每一种特征都做映射;

均值方差归一化(standardization)

它的另一个叫法是标准化,不管你中间过程如何,但最终它都会把数据的均值和方差分别控制为0和1。如果我们应用的数据没有边界或边界不容易区分,或数据与数据间的差别非常大时,此方法就非常合适。比如人的工资有人可能好几百万但是有人可能只有几千。公式如下面所示:
x_scale= (x- x_mean)/x_scale

本文采用的是最值归一化。

# 将像素的值标准化至0到1的区间内。
train_images, test_images = train_images / 255.0, test_images / 255.0

查看部分手写数字图片

打印前二十张手写数字图片,显示四行五列。

plt.figure(figsize=(20,10))
for i in range(20):
    plt.subplot(4, 5, i+1)
    plt.xticks([])
    plt.yticks([])
    plt.grid(False)
    plt.imshow(train_images[i], cmap=plt.cm.binary)
    plt.xlabel(train_labels[i])
plt.show()

效果图如下:
在这里插入图片描述

将数据调整为可训练的格式

#调整数据到我们需要的格式
train_images = train_images.reshape((60000, 28, 28, 1))
test_images = test_images.reshape((10000, 28, 28, 1))

CNN模型

模型源码

model = models.Sequential([
    layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)),#卷积层1,卷积核3*3
    layers.MaxPooling2D((2, 2)),                   #池化层1,2*2采样
    layers.Conv2D(64, (3, 3), activation='relu'),  #卷积层2,卷积核3*3
    layers.MaxPooling2D((2, 2)),                   #池化层2,2*2采样
    
    layers.Flatten(),                              #Flatten层,连接卷积层与全连接层
    layers.Dense(64, activation='relu'),		   #全连接层,特征进一步提取
    layers.Dense(10)                               #输出层,输出预期结果
])
# 打印网络结构
model.summary()

模型的各层参数

Model: “sequential”

Layer (type) Output Shape Param #
conv2d (Conv2D) (None, 26, 26, 32) 320
max_pooling2d (MaxPooling2D) (None, 13, 13, 32) 0
conv2d_1 (Conv2D) (None, 11, 11, 64) 18496
max_pooling2d_1 (MaxPooling2 ) (None, 5, 5, 64) 0
flatten (Flatten) (None, 1600) 0
dense (Dense) (None, 64) 102464
dense_1 (Dense) (None, 10) 650

模型参数

Total params: 121,930
Trainable params: 121,930
Non-trainable params: 0

设置compile

model.compile(optimizer='adam',
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
              metrics=['accuracy'])

训练模型并保存

model.save("1.h5")
history = model.fit(train_images, train_labels, epochs=10,
                    validation_data=(test_images, test_labels))

训练结果

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【深度学习】从LeNet-5识别手写数字入门深度学习 的相关文章

随机推荐

  • 如何查看自己的cuda环境,以及其对应版本

    第一步 cmd打开命令窗口 输入conda env list 查看有几个conda环境 第二步 选择一个环境进入conda 输入conda activate pytorch 第三步 进入python环境 输入python 第四部 在Pyth
  • 前端如何在H5页面调起微信支付

    在微信服务号开发的时候经常会遇到微信支付的功能实现 通过实际经验自己总结了一下 前端在H5页面调起微信支付有两种办法 一是利用内置对象 二是通过引用微信的js sdk 亲测都能支付成功 从写法上来看用内置对象方法比较简单 这里讲的只是前端要
  • Python读取和写入yaml文件

    yaml是专门用来写配置文件的语言 简洁强大 远比JSON格式方便 yaml在python语言中有PyYAML安装包 我这边应用场景是用来做接口自动化时 接口返回的值写入到yaml文件 然后需要用的时候直接引用即可 不如登录接口 我需获取接
  • java基础之内部类

    1 简介 内部类 inner class 是定义在另一个类中的类 使用内部类的原因 有以下三点 内部类方法可以访问可以访问该类定义所在的作用域中的数据 包括私有的数据 内部类可以对同一个包中的其他类隐藏起来 当想要定义一个回调函数时且不想编
  • 符合功能安全要求的动态测试工具-TESSY

    Tessy是一个专门针对嵌入式软件的C C 代码进行单元 集成测试的工具 它可以自动化地执行测试 评估测试结果并生成测试报告 Tessy的目标就是 通过自动化整个测试周期 支持针对C语言的单元测试 集成测试 同时 Tessy也同样关注测试组
  • SpringBoot利用cancl监听mysql的binlog日志通过kafja实时同步数据到es

    canal官网 https github com alibaba canal wiki gitlab https github com alibaba canal wiki QuickStart 下载地址 https github com
  • 关于GPT的20个知识,你都知道吗?

    1 GPT全称是什么 GPT全称是Generative Pre trained Transformer 2 GPT是由谁研发的 GPT是由OpenAI的研究人员研发的 3 GPT的目的是什么 GPT的目的是通过无监督的预训练 obtain
  • 离线安装/断网安装python第三方库

    由于team服务器在另一个校区 为了安全 校网络技术中心建议我们不要让服务器连外网 所以在复现代码的时候遇到一些python第三方库没法使用 就只能离线安装了 说起来都是泪 在这里 谢谢他们 参考链接 1 呕心沥血整理 python离线安装
  • 深度学习入门之Pytorch——Momentum

    动量法 动量法是梯度下降法的变式 在随机梯度下降的同时 增加动量 这是来自于物理中的概念 可以想象损失函数是一个山谷 一个球从山谷滑下来 在一个平坦的地势 球的滑动速度就会慢下来 可能陷入一些鞍点或者局部极小值点 如图 这个时候给它增加动量
  • Vue中自定义指令是什么?有哪些应用场景?

    一 什么是指令 开始之前先学习一下指令系统这个词 指令系统是计算机硬件的语言系统 也叫机器语言 它是系统程序员看到的计算机的主要属性 因此指令系统表征了计算机的基本功能决定了机器所要求的能力 在vue中提供了一套为数据驱动视图更为方便的操作
  • 终于解决了Invalid from address

    以太坊存证 ipfs 运行环境是ganache cli自动生成十个账户 import Web3 from web3 let getWeb3 new Promise function resolve reject Wait for loadi
  • Webpack详细教程

    webpack教程 第 1 章 webpack 简介 1 1 webpack 是什么 1 2 webpack 五个核心概念 1 2 1 Entry 入口 Entry 1 2 2 Output 输出 Output 1 2 3 Loader 1
  • 实战wxPython:045 - 一些扩展按钮控件

    本文介绍几个扩展按钮 它们不数属于wxPython核心库中的控件 但是它们可以提供一些特殊的效果 一 PlateButton PlateButton是一个通用按钮控件 它是一个自定义的平面按钮 它在许多方面模拟Safari浏览器书签栏中的按
  • linux安装git步骤;基于yum、dnf、源码安装【非常详细】

    这里写目录标题 一 dnf安装 二 yum安装 三 源码安装 1 基于 RPM 的发行版 Fedora RHEL RHEL衍生版 2 基于 Debian 的发行版 Debian Ubuntu Ubuntu derivatives 3 yum
  • 一文看懂npm、yarn、pnpm之间的区别

    原文 Understanding differences between npm yarn and pnpm 作者 Alex Kras 翻译 雁惊寒 本文作者对比了当前主流的包管理工具npm yarn pnpm之间的区别 并提出了合适的使用
  • 【Java基础】【狂神说Java】Java零基础学习视频通俗易懂P21-26(Day1昨天忘记发布了)

    Java小技巧 idea下 psvm tab键 补全 public static void main String args sout enter键 鼠标点击选择 可以实现补全 System out println System out p
  • Spring5学习深入学习理解Bean自动装配

    Spring5学习深入学习理解Bean自动装配 关于作者 作者介绍 博客主页 作者主页 简介 JAVA领域优质创作者 一名在校大三学生 在校期间参加各种省赛 国赛 斩获一系列荣誉 关注我 关注我学习资料 文档下载统统都有 每日定时更新文章
  • Linux下shel脚本之批量修改文件扩展名

    Linux下shel脚本之批量修改文件扩展名 一 脚本要求 二 脚本内容 三 运行脚本 一 脚本要求 二 脚本内容 三 运行脚本 一 脚本要求 1 在 data tmp 下的所有文件扩展名改为 py 二 脚本内容 1 查看要修改扩展名的目录
  • 随机数选最少数字求和

    本文为最近做过的一道编程笔试题 代码实现方式多种多样 此处本人提供的代码可以获得正确解 仅供大家参考 目录 一 题目描述 二 实现代码程序 三 测试结果截图 一 题目描述 题目描述 小明用计算机随机生成了N个正整数 他希望从这N个数中选取若
  • 【深度学习】从LeNet-5识别手写数字入门深度学习

    活动地址 CSDN21天学习挑战赛 目录 LeNet模型 搭建环境 安装需要的包 创建工程 数据集 相关代码 可以设置GPU训练 默认CPU 通过TensorFlow下载数据集 对数据进行归一化处理 最值归一化 normalization