文章目录

  • 1. 环境准备
  • 2. 安装minspore及其套件
  • 3. 程序撰写
  • 4. 总结

今天带大家体验一下 MindSpore 这个 AI 框架来完成手写数字识别的任务

1. 环境准备

使用Anaconda创建虚拟环境:

conda create -n mindspore python=3.8


创建完成后会显示以下的图像界面

这样我们的虚拟环境mindspore就创造完成

2. 安装minspore及其套件

mindspore 的安装可以参考:
https://mindspore.cn/install

conda install mindspore-cpu=1.8.1 -c mindspore -c conda-forge

验证安装是否成功:

python -c "import mindspore;mindspore.run_check()"

如果输出下方内容,就成功了

MindSpore version: 版本号
The result of multiplication calculation is correct, MindSpore has been installed successfully!

接下来继续安装其他依赖

pip install mindvision jupyterlab

安装 mindvision 是为了使用MindSpore Vision套件,其提供了用于下载并处理MNIST数据集的Mnist模块。
安装jupyterlab使用jupyter-lab来编写程序

安装完成后激活jupyter-lab环境

jupyter-lab

3. 程序撰写

from mindvision.dataset import Mnist# 下载并处理MNIST数据集
download_train = Mnist(path="./mnist", split="train", batch_size=32, repeat_num=1, shuffle=True, resize=32, download=True)download_eval = Mnist(path="./mnist", split="test", batch_size=32, resize=32, download=True)dataset_train = download_train.run()
dataset_eval = download_eval.run()

import mindspore.nn as nnclass LeNet5(nn.Cell):"""LeNet-5网络结构"""def __init__(self, num_class=10, num_channel=1):super(LeNet5, self).__init__()# 卷积层,输入的通道数为num_channel,输出的通道数为6,卷积核大小为5*5self.conv1 = nn.Conv2d(num_channel, 6, 5, pad_mode='valid')# 卷积层,输入的通道数为6,输出的通道数为16,卷积核大小为5*5self.conv2 = nn.Conv2d(6, 16, 5, pad_mode='valid')# 全连接层,输入个数为16*5*5,输出个数为120self.fc1 = nn.Dense(16 * 5 * 5, 120)# 全连接层,输入个数为120,输出个数为84self.fc2 = nn.Dense(120, 84)# 全连接层,输入个数为84,分类的个数为num_classself.fc3 = nn.Dense(84, num_class)# ReLU激活函数self.relu = nn.ReLU()# 池化层self.max_pool2d = nn.MaxPool2d(kernel_size=2, stride=2)# 多维数组展平为一维数组self.flatten = nn.Flatten()def construct(self, x):# 使用定义好的运算构建前向网络x = self.conv1(x)x = self.relu(x)x = self.max_pool2d(x)x = self.conv2(x)x = self.relu(x)x = self.max_pool2d(x)x = self.flatten(x)x = self.fc1(x)x = self.relu(x)x = self.fc2(x)x = self.relu(x)x = self.fc3(x)return xnetwork = LeNet5(num_class=10)

import mindspore.nn as nn# 定义损失函数
net_loss = nn.SoftmaxCrossEntropyWithLogits(sparse=True, reduction='mean')# 定义优化器函数
net_opt = nn.Momentum(network.trainable_params(), learning_rate=0.01, momentum=0.9)

import mindspore as ms# 设置模型保存参数,模型训练保存参数的step为1875。
config_ck = ms.CheckpointConfig(save_checkpoint_steps=1875, keep_checkpoint_max=10)# 应用模型保存参数
ckpoint = ms.ModelCheckpoint(prefix="lenet", directory="./lenet", config=config_ck)

from mindvision.engine.callback import LossMonitor
import mindspore as ms# 初始化模型参数
model = ms.Model(network, loss_fn=net_loss, optimizer=net_opt, metrics={'accuracy'})# 训练网络模型,并保存为lenet-1_1875.ckpt文件
model.train(10, dataset_train, callbacks=[ckpoint, LossMonitor(0.01, 1875)])

acc = model.eval(dataset_eval)print("{}".format(acc))

import mindspore as ms# 加载已经保存的用于测试的模型
param_dict = ms.load_checkpoint("./lenet/lenet-1_1875.ckpt")
# 加载参数到网络中
ms.load_param_into_net(network, param_dict)

import numpy as np
import mindspore as ms
import matplotlib.pyplot as pltmnist = Mnist("./mnist", split="train", batch_size=6, resize=32)
dataset_infer = mnist.run()
ds_test = dataset_infer.create_dict_iterator()
data = next(ds_test)
images = data["image"].asnumpy()
labels = data["label"].asnumpy()plt.figure()
for i in range(1, 7):plt.subplot(2, 3, i)plt.imshow(images[i-1][0], interpolation="None", cmap="gray")
plt.show()# 使用函数model.predict预测image对应分类
output = model.predict(ms.Tensor(data['image']))
predicted = np.argmax(output.asnumpy(), axis=1)# 输出预测分类与实际分类
print(f'Predicted: "{predicted}", Actual: "{labels}"')


程序的输出和实际的一致,说明本次的模型训练和预测是很成功的。

4. 总结

整个流程下来,从模型的设计导训练,整个流程都比较清晰,优化器的设置和参数等的定义都很直观。整体上模型的体验都是不错的,但在jupyter-lab运行时候的warning无法消除,在观感上有点不大好。

欢迎加入MindSpore社区体验这个小任务

MindSpore手写数字识别体验相关推荐

  1. MindSpore手写数字识别初体验,深度学习也没那么神秘嘛

    摘要:想了解深度学习却又无从下手,不如从手写数字识别模型训练开始吧! 深度学习作为机器学习分支之一,应用日益广泛.语音识别.自动机器翻译.即时视觉翻译.刷脸支付.人脸考勤--不知不觉,深度学习已经渗入 ...

  2. 我的Go+语言初体验——Go+语言构建神经网络实战手写数字识别

    "我的Go+语言初体验" | 征文活动进行中- 我的Go+语言初体验--Go+语言构建神经网络实战手写数字识别 0. 前言 1. 神经网络相关概念 2. 构建神经网络实战手写数字识 ...

  3. 【mindspore】mindspore实现手写数字识别

    mindspore实现手写数字识别 具体流程参考教程:MindSpore快速入门 MindSpore 接口文档 注:本文章记录的是我在开发过程中的学习笔记,仅供参考学习,欢迎讨论,但不作为开发教程使用 ...

  4. CVNLP基础6之手写数字识别代码体验

    文章目录 总流程(思路)预览 x是输入的图片y是图片对应的label 关于训练数据集的说明 搭建计算网络层 计算损失值loss 优化损失值loss(minimize loss) 手写数字初体验代码 代 ...

  5. MNIST手写数字识别 —— ResNet-经典卷积神经网络

    了解ResNet18的网络结构:掌握模型的保存和加载方法:掌握批量测试图片的方法. 结合图像分类任务,使用典型的图像分类网络ResNet18,实现手写数字识别. ResNet作为经典的图像分类网络有其 ...

  6. 基于LeNet5的手写数字识别,在ModelArts和GPU上复现

    基于LeNet5的手写数字识别 实验介绍 LeNet5 + MNIST被誉为深度学习领域的"Hello world".本实验主要介绍使用MindSpore在MNIST手写数字数据集 ...

  7. matlab 对mnist手写数字数据集进行判决分析_人工智能TensorFlow(十四)MINIST手写数字识别...

    MNIST是一个简单的视觉计算数据集,它是像下面这样手写的数字图片: MNIST 每张图片还额外有一个标签记录了图片上数字是几,例如上面几张图的标签就是:5.0.4.1. MINIST数据 MINIS ...

  8. 深度学习数字仪表盘识别_【深度学习系列】手写数字识别实战

    上周在搜索关于深度学习分布式运行方式的资料时,无意间搜到了paddlepaddle,发现这个框架的分布式训练方案做的还挺不错的,想跟大家分享一下.不过呢,这块内容太复杂了,所以就简单的介绍一下padd ...

  9. Kaggle手写数字识别(Digit Recognizer)记录

    竞赛地址 https://www.kaggle.com/c/digit-recognizer 苦于学了cs231n和pytorch之后没有东西拿来练手,就去kaggle上找了一个入门竞赛,MNIST手 ...

最新文章

  1. 运维人员20道必会iptables面试题
  2. rust睡觉按键没反应_Rust 有问有答之 use 关键字
  3. android app 移植到pc,微软开发新应用把Android app“移植”到Win Phone
  4. linux的创建线程池,Linux下通用线程池的创建与使用(上) (3)
  5. mysql 唯一索引_面试官:谈谈你对mysql索引的认识?
  6. 如何访问SSH公钥?
  7. 转 五种提高 SQL 性能的方法
  8. iOS底层探索之Block(二)——如何解决Block循环引用问题?
  9. 《 郝斌 java自学视频 完结 》_郝斌Java自学视频 全107讲视频教程下载 完整版
  10. 达梦数据库实时主备环境的搭建(DM7)
  11. TypeError: AMap.MouseTool is not a constructor TypeError: AMap.MouseTool is not a constructor
  12. Linux搭建vpn服务器
  13. WIFI6:WLAN 组播转单播原理与测试
  14. 深度学习在推荐算法上的应用进展
  15. 从初级工程师发展到高级工程师,需要跨越的鸿沟
  16. 重新指定iphone备份目录
  17. 软件相貌测试准确吗,相貌测试(史上最准的颜值测试)
  18. 2022,视频号的十大机会
  19. Dirty Pipe脏管道提权漏洞复现(CVE-2022-0847)
  20. A*算法(二)启发式算法

热门文章

  1. [未]DRN: A Deep Reinforcement Learning Framework for News Recommendation
  2. 浙里办(H5)上传流程
  3. 解决:_pickle.UnpicklingError: A load persistent id instruction was encountered,
  4. 第十二届蓝桥杯Java B组——前期知识汇总梳理
  5. 如何优雅又庶民地在Github Pages中上线Ghost博客系统
  6. java 可见_java 可见性简单总结
  7. 江苏省计算机二级基础部分,江苏省计算机二级-基础知识部分.doc
  8. 为什么剑桥出身的“AI教父”辛顿会担心?
  9. 软件实施工程师这个职位
  10. 快速找出两个字符串中所有相同的字符