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

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

import paddle
import paddle.nn.functional as F
from paddle.vision.transforms import Compose, Normalize

transform = 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 = 3
    optim = 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)

在这里插入图片描述

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

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

相关文章

农业四情监测站在农业生产中有哪些作用

TH-Q3农业四情监测站是一种先进的农业监测设备,可以对土壤、虫情、气象、苗情、孢子等生产环境状况进行实时动态监控,为农业生产提供全面的数据支持和决策依据。 该监测站通常包括土壤温度、湿度、PH值、电导率等土壤参数传感器,虫情监测仪、…

AI绘图Stable Diffusion,如何无损高清放大图片,保姆级教程建议收藏!

前言 我们在用 stable diffusion 制作AI图片时,默认生成图片的尺寸为512*512,即使是竖图一般也就是512*768,如果再把尺寸设置大一些,就会因为硬件算力不够而造成系统崩溃,今天就来跟大家聊一聊,如何将制作…

Sam Blackshear谈Move如何赋能开发者

Move编程语言提供了直观的编码体验,让开发者能够快速上手。Mysten Labs的联合创始人兼CTO Sam Blackshear创建了Move,这是一种用于编写智能合约的语言,更像传统编程语言,如JavaScript或Rust。 https://youtu.be/iYe_hG8Mzx8 视频…

利用if-else,while-do,case-end,的存储过程

DDL CREATE TABLE student (id INT PRIMARY KEY AUTO_INCREMENT, -- 自增ID作为主键createDate TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL, -- 记录创建时间,默认为当前时间userName VARCHAR(255) NOT NULL, -- 用户名,不能为空phone VARCHAR(2…

加速大模型落地,阿里云大模型最新进展

今天在阿里云AI智领者峰会上,阿里云正式发布通义千问2.5,模型性能全面赶超GPT-4 Turbo,成为地表最强中文大模型。同时,通义千问最新开源的1100亿参数模型在多个基准测评收获最佳成绩,超越Meta的Llama-3-70B&#xff0c…

无人机摄影测量数据处理、三维建模及在土方量计算

原文链接:无人机摄影测量数据处理、三维建模及在土方量计算https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247603776&idx2&snd96440e116900a46a71c45ff77316896&chksmfa8217a7cdf59eb15da39dd6366378b98ca39b9c836b76a473ff292b67ee37a6ff6…

从Photoshop到AutoCAD,TeamOS在线预览全搞定:可道云TeamOS系统的在线预览功能深度体验

我们每天都要处理大量的文件,领导发过来的压缩包、同事发来的psd文件等,各种格式的文件杂乱又不好查阅…… 迫切需要一个能够在线预览、管理文件的平台。 初次搭建teamOS 可道云teamOS是一个企业级的在线文件管理平台,支持上百种格式的在线…

Pytest测试实战

Pytest测试框架是动态语言Python专用的测试框架,使用起来非常的简单,这主要得易于它的设计,Pytest测试框架具备强大的功能,丰富的第三方插件,以及可扩展性好,可以很好的和unittest测试框架能够结合起来在项…

启明云端ESP32-S3模组WT32-S3选型,Flash最大可选16MB,PSRAM最大可选8MB

使用ESP32-S3单芯片,可以完成语音连接屏控三合一功能。接下来给大家推荐一款ESP32-S3模组WT32-S3,Flash 最大可选 16MB,PSRAM 最大可选 8MB。核心芯片是ESP32-S3。 2.4GHz Wi-Fi(802.11b/g/n)Bluetooth 5(LE)模组,内置ESP32-S3系列芯片&#…

分析人工智能在智慧银行服务中的实际应用以及面临的挑战

一、引言 近年来,人工智能(AI)技术快速发展,其在金融领域,特别是智慧银行服务中的应用日益广泛。人工智能以其独特的数据处理能力、预测分析能力以及自动化决策能力,极大地提升了智慧银行的服务效率、降低了运营成本,并优化了客户体验。然而,人工智能在智慧银行服务中…

建模:3dmax

3Dmax 制作模型和动画(橘肉); RizomUV 对模型进行展UV(橘皮); Substance Painter 纹理手绘(给橘皮制定想要的皮肤); 1.基础 1.1可编辑多边形、可编辑样条线 体、面都需要…

霍庭格TruPlasma MF 7100 7050电源现货50KW

霍庭格TruPlasma MF 7100 7050电源现货50KW

力扣HOT100 - 416. 分割等和子集

解题思路: 动态规划 对于当前考虑的元素 nums[i],如果 dp[ j - nums[ i ] ] 为 true,说明可以用前面的元素构成和为 j -nums[ i ] 的子集,那么在加上当前元素 nums[ i ] 的情况下,就可以构成和为 j 的子集&#xff0…

【MySQL】 查询进阶 | 聚合查询 | 联合查询 | 聚合函数 | 笛卡尔积 | 内连接 | 外链接 | 自连接 | 子查询 | 合并查询

文章目录 查询进阶1.聚合查询1.聚合函数2.group by 子句3.having 2.联合查询笛卡尔积 1.内连接查询许仙同学的成绩查询所有同学的总成绩查询所有同学的每门课程和分数: 2.外连接1.内连接:2.左外连接3.右外链接 3.自连接4.子查询单行子查询多行子查询查询…

CA、ukey、java对接登录

Ukey登录 随着互联网技术的发展,越来越多的应用需要用户进行登录,以验证其身份和权限。为了增强安全性,许多应用选择使用硬件设备来存储和管理用户的身份信息。Ukey(也称为USB Key)是一种常见的硬件设备,用…

【极简】docker常用操作

镜像images是静态的 容器container是动态的,是基于镜像的,类似于一个进程。 查看docker images: docker images 或者docker image ls 查看docker container情况:docker ps -a,-a意思是--all 运行一个container: doc…

高效水深度除六价铬工艺的技术研究与应用

关键词:六价铬;水处理;离子交换;环境保护;技术创新​ 随着工业化进程的加速,重金属污染尤其是六价铬的排放问题日益严重。六价铬是一种高度有害的污染物,广泛存在于电镀、染料制造、皮革加工等…

JUnit5测试用例

1.用Test注解表示为测试方法 2.使用DisplayName定义别名 3.使用Assertions类的断言方法 使用断言,可以判断方法的实际执行结果和预期结果是否一致 assertEqualsassertTureassertNotNullassertAllassertThrows 下图是预期与实际不同时报错图 4.使用BeforeEach注解&…

【原创】java+springboot+mysql企业邮件管理系统设计与实现

个人主页:程序猿小小杨 个人简介:从事开发多年,Java、Php、Python、前端开发均有涉猎 博客内容:Java项目实战、项目演示、技术分享 文末有作者名片,希望和大家一起共同进步,你只管努力,剩下的交…

uniapp微信小程序使用vscode代替HBuilderX开发uniapp微信小程序并且vscode改动代码微信开发者工具能实时更新

前言 最近公司开发新的小程序项目,经调研综合所有人员考虑,用uni-app Vue3tsvite技术栈开发;而官方推荐使用HBuilderX开发,而考虑到目前公司所有前端人员对VsCode更熟悉,故此总结了一下uniapp项目使用vscode代替HBuild…