开发者
资源
在鲲鹏开发板上运行深度学习的“Hello World”
在鲲鹏开发板上运行深度学习的“Hello World”
发表于2025/05/09
1700

在鲲鹏开发板上运行深度学习的“Hello World”

——用MNIST数据集基于CPU进行训推

什么是MNIST

MNIST-0000000001-2e09631a_09liOmx.jpg

MNIST(Modified National Institute of Standards and Technology)是一个包含手写数字的数据集。“NIST”代表国家标准和技术研究所(National Institute of Standards and Technology),是最初收集这些数据的机构。“M”代表“修改的(Modified)”,即数据已经经过预处理,这样可以更容易地与机器学习算法一起使用。

MNIST数据集包括手写数字的扫描和相关标签(描述每个图像中包含0~9中哪个数字)。这个简单的分类问题是深度学习研究中最简单和最广泛使用的测试之一,Geoffrey Hinton将其描述为“机器学习的果蝇”。

确切的说,MNIST包含60,000张手写数字训练图像和10,000张测试图像,每张图片是28x28像素大小、每个像素亮度值从0(黑)到255(白)的灰度图。

搭建运行环境

本案例基于PyTorch框架,所以您需要在开发板上安装好它(目前Latest PyTorch requires Python 3.9 or later)。

我们以香橙派鲲鹏Pro开发板openEuler用户登录开发板(关于如何登录开发板的详情请阅览其用户手册),其运行环境展示如下:

$ uname -a

Linux openEuler 5.10.0+ #1 SMP Mon Feb 26 15:29:07 CST 2024 aarch64 aarch64 aarch64 GNU/Linux

$ lscpu

架构: aarch64
CPU 运行模式: 64-bit
字节序: Little Endian
CPU: 4
在线 CPU 列表: 0-3

......

$ cat /etc/os-release

NAME="openEuler"
VERSION="22.03 (LTS-SP4)"
ID="openEuler"
VERSION_ID="22.03"
PRETTY_NAME="openEuler 22.03 (LTS-SP4)"
ANSI_COLOR="0;31"

$ python -V

Python 3.9.9

$ python -c "import torch; print(torch.__version__)"

2.6.0+cpu

运行训推实例

① 源代码

见本文附件“ti.txt”,运行时将文件后缀名改为“.py”。

② 训练

$ python ti.py --action training

Action: training
100.0%
100.0%
100.0%
100.0%

Training:

Epoch 1, Batch 100, Loss: 0.4811
Epoch 1, Batch 200, Loss: 0.1478
Epoch 1, Batch 300, Loss: 0.1018
Epoch 1, Batch 400, Loss: 0.0913
Epoch 1, Batch 500, Loss: 0.0786
Epoch 1, Batch 600, Loss: 0.0717
Epoch 1, Batch 700, Loss: 0.0685
Epoch 1, Batch 800, Loss: 0.0665
Epoch 1, Batch 900, Loss: 0.0657
Epoch 2, Batch 100, Loss: 0.0465
Epoch 2, Batch 200, Loss: 0.0511
Epoch 2, Batch 300, Loss: 0.0415
Epoch 2, Batch 400, Loss: 0.0456
Epoch 2, Batch 500, Loss: 0.0413
Epoch 2, Batch 600, Loss: 0.0370
Epoch 2, Batch 700, Loss: 0.0381
Epoch 2, Batch 800, Loss: 0.0465
Epoch 2, Batch 900, Loss: 0.0443
Epoch 3, Batch 100, Loss: 0.0298
Epoch 3, Batch 200, Loss: 0.0313
Epoch 3, Batch 300, Loss: 0.0240
Epoch 3, Batch 400, Loss: 0.0272
Epoch 3, Batch 500, Loss: 0.0273
Epoch 3, Batch 600, Loss: 0.0344
Epoch 3, Batch 700, Loss: 0.0266
Epoch 3, Batch 800, Loss: 0.0297
Epoch 3, Batch 900, Loss: 0.0324
Epoch 4, Batch 100, Loss: 0.0132
Epoch 4, Batch 200, Loss: 0.0229
Epoch 4, Batch 300, Loss: 0.0189
Epoch 4, Batch 400, Loss: 0.0192
Epoch 4, Batch 500, Loss: 0.0199
Epoch 4, Batch 600, Loss: 0.0218
Epoch 4, Batch 700, Loss: 0.0281
Epoch 4, Batch 800, Loss: 0.0187
Epoch 4, Batch 900, Loss: 0.0247
Epoch 5, Batch 100, Loss: 0.0127
Epoch 5, Batch 200, Loss: 0.0098
Epoch 5, Batch 300, Loss: 0.0187
Epoch 5, Batch 400, Loss: 0.0126
Epoch 5, Batch 500, Loss: 0.0191
Epoch 5, Batch 600, Loss: 0.0158
Epoch 5, Batch 700, Loss: 0.0151
Epoch 5, Batch 800, Loss: 0.0218
Epoch 5, Batch 900, Loss: 0.0172

Test:
Accuracy on test set: 98.86%

Saving:
The model was saved to mnist_cnn_cpu.pth.

$ ls

data mnist_cnn_cpu.pth ti.py

首次运行时会自动下载MNIST数据集。然后在训练集上进行训练,在测试集上进行测试。最终将模型参数文件保存在“.pth”文件中。

③ 推理

$ python ti.py --action inference

Action: inference

Inference:
Predicted: 7, Actual: 7

上述结果表示手写数字的预测值和实际值一致。

如果是在桌面图形命令行终端中运行,则会显示可视化效果:

inference-result.png

参考资料

  • MNIST
  • Ian Goodfellow(伊恩·古德费洛); Yoshua Bengio(约书亚·本吉奥); Aaron Courville(亚伦·库维尔). 深度学习(第1部分):应用数学与机器学习基础 (p. 50). 人民邮电出版社. Kindle Edition.
收藏举报
Level 1
0
帖子
0
粉丝
0
获赞