| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 基于PaddlePaddle的LeNet神经网络MNIST数据集分类 -> 正文阅读 |
|
[人工智能]基于PaddlePaddle的LeNet神经网络MNIST数据集分类 |
文章目录1.前言MNIST是一个手写体数字的图片数据集,MNIST是深度学习领域标准、易用的成熟数据集,该数据集来由美国国家标准与技术研究所(National Institute of Standards and Technology (NIST))发起整理,一共统计了来自250个不同的人手写数字图片,其中50%是高中生,50%来自人口普查局的工作人员。该数据集的收集目的是希望通过算法,实现对手写数字的识别。 MNIST 1998年,Yan LeCun 等人发表了论文《Gradient-Based LearningApplied to Document Recognition》,首次提出了LeNet-5 网络,利用上述数据集实现了手写字体的识别。 Mnist数据集官网:http://yann.lecun.com/exdb/mnist/ 在上述文件中,训练集一共包含了 60,000 张图像和标签,而测试集一共包含了 10,000 张图像和标签。测试集中前5000个来自最初NIST项目的训练集,后5000个来自最初NIST项目的测试集。前5000个比后5000个要规整,这是因为前5000个数据来自于美国人口普查局的员工,而后5000个来自于大学生。 如今在深度学习领域,卷积神经网络占据了至关重要的地位,从最早LeCun提出的简单LeNet,到如今ImageNet大赛上的优胜模型VGGNet、GoogLeNet、ResNet等,人们在图像分类领域,利用卷积神经网络得到了一系列惊人的结果。 2.算法设计2.1任务流程本次使用飞桨框架来完成手写数字识别模型任务,其预测模型任务的流程为: 任务流程 数据处理:从本地或者URL读取数据,并完成预处理操作(如数据校验,格式转化等),保证模型可读取。 模型设计:网络结构设计,相当于模型的假设空间,即模型能够表达的关系集合。 训练配置:设定模型采用带寻解算法,即优化器,并指定计算资源。 训练过程:循环调用训练过程,每轮都包括前向计算,损失函数(优化目标)和反向传播三个步骤。 模型保存:将训练好的模型保存,模型预测时调用。 2.2 LeNet简述LeNet是一种用于手写体字符识别的非常高效的卷积神经网络。 出自论文《Gradient-Based Learning Applied to Document Recognition》 由深度学习三巨头之一的Yan LeCun提出,他同时也是卷积神经网络CNN之父 LeNet主要用来进行手写字符的识别与分类,并在美国的银行中投入了使用。 其实现确立了CNN的结构,现在神经网络中的许多内容在LeNet的网络结构中都能看到。 结构图 2.3 算法设计
2.3.1 引入相关的包
2.3.2 读取数据集手写数字的MNIST数据集,包含60,000个用于训练的示例和10,000个用于测试的示例。这些数字已经过尺寸标准化并位于图像中心,图像是固定大小(28x28像素),其值为0到1。 飞桨提供了多个封装好的数据集API,涵盖计算机视觉、自然语言处理、推荐系统等多个领域,帮助开发者快速完成深度学习任务。 如在手写数字识别任务中,通过paddle.vision.datasets.MNIST可以直接获取处理好的MNIST训练集、测试集. 飞桨API支持如下常见的学术数据集:
通过paddle.vision.datasets.MNIST API设置数据读取器,代码如下所示。
2.3.3 归一化数据集使用paddle.vision.transforms.Normalize 对图像进行归一化。 图像归一化处理支持两种方式:
以下代码实现了数据集归一化的过程。
mean ()中填入用于每个通道归一化的均值。 std () 用于每个通道归一化的标准差值。 to_rgb (bool, optional) - 是否转换为 rgb 的格式。默认值:False。
2.3.4 取出一个数据瞅瞅
2.3.5 定义LeNet网络paddle.nn 文档目录下包含飞桨框架支持的神经网络层和相关函数的相关API
2.3.6 封装模型并配置2.3.6.1 Adam优化器Adam优化器可以在paddle.optimizer.Adam中定义 Adam优化器出自Adam论文的第二节,能够利用梯度的一阶矩估计和二阶矩估计动态调整每个参数的学习率。 其参数更新的计算公式如下: 论文链接:https://arxiv.org/abs/1412.6980 在优化器中可以自定义学习率learning_rate (),用于参数更新的计算。可以是一个浮点型值或者一个_LRScheduler类,默认值为0.001。 2.3.6.2 损失函数损失函数使用交叉熵损失函数CrossEntropyLoss(),计算输入input和标签label间的交叉熵损失 ,它结合了 LogSoftmax和NLLLoss 的OP计算,可用于训练一个n类分类器。 如果提供 weight 参数的话,它是一个 1-D 的tensor, 每个值对应每个类别的权重。 该损失函数的数学计算公式如下: 当 weight 不为 none 时,损失函数的数学计算公式为: 2.3.6.3 精确度使用 paddle.metric.Accuracy() 计算精确度。
2.3.7 训练模型使用model.fit进行模型训练 下面的代码中可以定义epochs和batch_size等。 Verbosre = 1表示使用进度条的方式打印日志。
2.3.8 使用模型预测
2.4 不同参数对预测精度的影响本次探究learning_rate,epochs,batch_size三个参数对预测精度的影响 2.4.1 重新封装模型重新封装模型使得可以传入参数learning_rate,epochs,batch_size
2.4.2 学习率对预测精度的影响
在以上代码中,设定
2.4.3 训练的轮数对预测精度的影响
在以上代码中,设定
【警告!警告!警告!】 这一部分测试代码的运行时间应该是最长的 请务必开启至尊算力 同时做好打了好几局王者荣耀还没运行完的准备
2.4.4 数据的批大小对预测精度的影响
在以上代码中,设定
3. 总结本次探究learning_rate,epochs,batch_size三个参数对预测精度的影响。 通过运行的结果可见,参数的调整是人工智能模型训练过程中较为重要的一个部分。 好的参数能够大大减少模型运行的速度,也能带来较高的精确率。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 20:25:37- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |