当前位置: 首页 > news >正文

python手写数字识别(PaddlePaddle框架、MNIST数据集)

python手写数字识别(PaddlePaddle框架、MNIST数据集)

import paddle
import paddle.nn.functional as F
from paddle.vision.transforms import Compose, Normalizetransform = Compose([Normalize(mean=[127.5],std=[127.5],data_format='CHW')])
# 使用transform对数据集做归一化
print('download training data and load training data')
# 使用飞桨框架自带的 paddle.vision.datasets.MNIST 完成mnist数据集的加载
train_dataset = paddle.vision.datasets.MNIST(mode='train', transform=transform)
test_dataset = paddle.vision.datasets.MNIST(mode='test', transform=transform)
print('load finished')# 用paddle.nn下的API,如Conv2D、MaxPool2D、Linear完成卷积神经网络的构建
class CNN(paddle.nn.Layer):def __init__(self):super().__init__()self.conv1 = paddle.nn.Conv2D(in_channels=1, out_channels=6, kernel_size=5, stride=1, padding=2)self.max_pool1 = paddle.nn.MaxPool2D(kernel_size=2,  stride=2)self.conv2 = paddle.nn.Conv2D(in_channels=6, out_channels=16, kernel_size=5, stride=1)self.max_pool2 = paddle.nn.MaxPool2D(kernel_size=2, stride=2)self.linear1 = paddle.nn.Linear(in_features=16*5*5, out_features=120)self.linear2 = paddle.nn.Linear(in_features=120, out_features=84)self.linear3 = paddle.nn.Linear(in_features=84, out_features=10)def forward(self, x):x = self.conv1(x)x = F.relu(x)x = self.max_pool1(x)x = self.conv2(x)x = F.relu(x)x = self.max_pool2(x)x = paddle.flatten(x, start_axis=1,stop_axis=-1)x = self.linear1(x)x = F.relu(x)x = self.linear2(x)x = F.relu(x)x = self.linear3(x)return x# 开始对模型进行训练,先构建train_loader,加载训练数据,然后定义train函数,设置好损失函数后,按batch加载数据,完成模型的训练
train_loader = paddle.io.DataLoader(train_dataset, batch_size=128, shuffle=True)
# 加载训练集 batch_size 设为 128
def train(model):model.train()epochs = 3optim = paddle.optimizer.Adam(learning_rate=0.001, parameters=model.parameters())# 用Adam作为优化函数print("Training:")for epoch in range(epochs):for batch_id, data in enumerate(train_loader()):x_data = data[0]y_data = data[1]predicts = model(x_data)loss = F.cross_entropy(predicts, y_data)# 计算损失acc = paddle.metric.accuracy(predicts, y_data)loss.backward()if batch_id % 300 == 0:print("epoch: {}, batch_id: {}, loss is: {}, acc is: {}".format(epoch, batch_id, loss.numpy(), acc.numpy()))optim.step()optim.clear_grad()
model = CNN()
train(model)# 训练完成后,需要验证模型的效果,此时,加载测试数据集,然后用训练好的模对测试集进行预测,计算损失与精度。
test_loader = paddle.io.DataLoader(test_dataset, places=paddle.CPUPlace(), batch_size=128)
# 加载测试数据集
def test(model):model.eval()print("Testing:")for batch_id, data in enumerate(test_loader()):x_data = data[0]y_data = data[1]predicts = model(x_data)# 获取预测结果loss = F.cross_entropy(predicts, y_data)acc = paddle.metric.accuracy(predicts, y_data)if batch_id % 50 == 0:print("batch_id: {}, loss is: {}, acc is: {}".format(batch_id, loss.numpy(), acc.numpy()))
test(model)

在这里插入图片描述

相关文章:

  • 嵌入式科普(18)Ubuntu在移动硬盘的安装和启动
  • JavaWeb基础(HTML,CSS,JS)
  • 大数据运维面临的常见问题及其解决方案和步骤
  • 力扣HOT100 - 136. 只出现一次的数字
  • 继续分析开发人员容易被骗的原因和防范措施
  • 3D工业视觉
  • 功耗相关总结
  • Vue3实战笔记(33)—组件传值props终章
  • jsp连接数据库
  • 【考研数学】李林《880》是什么难度水平强化够用吗
  • 全文检索ElasticSearch简介
  • ubuntu 卸载 程序
  • 云和恩墨海外首秀在吉隆坡召开的2024中国智能科技与文化展览会
  • 操作系统 c语言简单模仿进程创建和时间片轮转调度算法中的进程调度
  • 使用决策树对金融贷款数据进行分析
  • (三)从jvm层面了解线程的启动和停止
  • AHK 中 = 和 == 等比较运算符的用法
  • Android Studio:GIT提交项目到远程仓库
  • CentOS7 安装JDK
  • java 多线程基础, 我觉得还是有必要看看的
  • ubuntu 下nginx安装 并支持https协议
  • XForms - 更强大的Form
  • 初识MongoDB分片
  • 跨域
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 如何编写一个可升级的智能合约
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP
  • 用Python写一份独特的元宵节祝福
  • 自定义函数
  • gunicorn工作原理
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • #《AI中文版》V3 第 1 章 概述
  • (2)MFC+openGL单文档框架glFrame
  • (a /b)*c的值
  • (javascript)再说document.body.scrollTop的使用问题
  • (LeetCode 49)Anagrams
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (十八)用JAVA编写MP3解码器——迷你播放器
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (原創) X61用戶,小心你的上蓋!! (NB) (ThinkPad) (X61)
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • ***原理与防范
  • **PHP分步表单提交思路(分页表单提交)
  • *Algs4-1.5.25随机网格的倍率测试-(未读懂题)
  • .net 4.0 A potentially dangerous Request.Form value was detected from the client 的解决方案
  • .net core 3.0 linux,.NET Core 3.0 的新增功能
  • .NET Reactor简单使用教程
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)
  • [1159]adb判断手机屏幕状态并点亮屏幕
  • [3300万人的聊天室] 作为产品的上游公司该如何?
  • [Android Studio] 开发Java 程序