当前位置: 首页 > 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语言简单模仿进程创建和时间片轮转调度算法中的进程调度
  • 使用决策树对金融贷款数据进行分析
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • 77. Combinations
  • ES6系列(二)变量的解构赋值
  • FineReport中如何实现自动滚屏效果
  • Flex布局到底解决了什么问题
  • HashMap ConcurrentHashMap
  • JavaScript设计模式之工厂模式
  • java中的hashCode
  • mysql_config not found
  • 高性能JavaScript阅读简记(三)
  • 猴子数据域名防封接口降低小说被封的风险
  • 记录一下第一次使用npm
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 深度学习入门:10门免费线上课程推荐
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • 翻译 | The Principles of OOD 面向对象设计原则
  • #pragma once与条件编译
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (9)STL算法之逆转旋转
  • (SpringBoot)第二章:Spring创建和使用
  • (二)pulsar安装在独立的docker中,python测试
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • (万字长文)Spring的核心知识尽揽其中
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • ***汇编语言 实验16 编写包含多个功能子程序的中断例程
  • .NET CF命令行调试器MDbg入门(一)
  • .Net 代码性能 - (1)
  • .NET/C# 使用 ConditionalWeakTable 附加字段(CLR 版本的附加属性,也可用用来当作弱引用字典 WeakDictionary)
  • .net8.0与halcon编程环境构建
  • .NET大文件上传知识整理
  • .Net开发笔记(二十)创建一个需要授权的第三方组件
  • @NoArgsConstructor和@AllArgsConstructor,@Builder
  • @SuppressLint(NewApi)和@TargetApi()的区别
  • @Transactional类内部访问失效原因详解
  • [ 隧道技术 ] 反弹shell的集中常见方式(二)bash反弹shell