基于openKylin与RISC-V的MindSpore AI项目实践
项目目标:
- 在openKylin系统上安装和配置MindSpore框架。
- 开发一个简单的图像分类模型,并在RISC-V平台上进行训练和推理。
- 根据RISC-V的特性,对MindSpore框架进行必要的优化。
目录
项目目标:
训练模型
编写训练代码,设置优化器、损失函数等,并开始训练模型。
模型推理
在模型训练完成后,我们可以进行推理,即使用训练好的模型对新的图像进行分类。首先,我们需要加载训练好的模型参数,然后将这些参数加载到我们的模型中。
针对RISC-V优化
部署与测试
总结:

步骤一:安装MindSpore
- 首先,我们需要在openKylin系统上安装MindSpore。
- 请参照MindSpore官方文档,根据openKylin系统的特性进行安装。--MindSpore官方文档
步骤二:准备数据集
- 选择一个适合图像分类的数据集,如MNIST或CIFAR-10。下载数据集,并将其预处理为MindSpore可以识别的格式。

(没有的开发者们可以找我哦)
步骤三:编写模型代码
- 使用MindSpore编写一个简单的卷积神经网络(CNN)模型,用于图像分类。
import mindspore.nn as nn
from mindspore import Tensor
from mindspore.ops import operations as P class SimpleCNN(nn.Cell): def __init__(self, num_classes=10): super(SimpleCNN, self).__init__() self.conv1 = nn.Conv2d(3, 32, 3, pad_mode='same') self.relu1 = nn.ReLU() self.max_pool1 = nn.MaxPool2d(kernel_size=2, stride=2) self.conv2 = nn.Conv2d(32, 64, 3, pad_mode='same') self.relu2 = nn.ReLU() self.max_pool2 = nn.MaxPool2d(kernel_size=2, stride=2) self.flatten = nn.Flatten() self.fc1 = nn.Dense(64 * 7 * 7, 128) self.relu3 = nn.ReLU() self.fc2 = nn.Dense(128, num_classes) def construct(self, x): x = self.conv1(x) x = self.relu1(x) x = self.max_pool1(x) x = self.conv2(x) x = self.relu2(x) x = self.max_pool2(x) x = self.flatten(x) x = self.fc1(x) x = self.relu3(x) x = self.fc2(x) return x # 实例化模型
model = SimpleCNN()
-
训练模型
-
编写训练代码,设置优化器、损失函数等,并开始训练模型。
from mindspore import context
from mindspore.train.callback import ModelCheckpoint, CheckpointConfig, LossMonitor
from mindspore.train.loss_scale_manager import FixedLossScaleManager
from mindspore import Tensor
from mindspore.nn import SoftmaxCrossEntropyWithLogits
from mindspore.train import Model # 设置上下文环境
context.set_context(mode=context.GRAPH_MODE, device_target="CPU") # 创建数据加载器
# ... # 创建损失函数和优化器
criterion = SoftmaxCrossEntropyWithLogits(sparse=True, reduction="mean")
optimizer = nn.Momentum(model.trainable_params(), learning_rate=0.01, momentum=0.9) # 配置模型保存
config_ck = CheckpointConfig(save_checkpoint_steps=1000, keep_checkpoint_max=10)
ckpoint_cb = ModelCheckpoint(prefix="checkpoint_simplecnn", directory="./", config=config_ck) # 开始训练
model = Model(model, criterion, optimizer, metrics={"Accuracy": nn.Accuracy()}, loss_scale_manager=FixedLossScaleManager())
model.train(epoch_num, train_dataset, callbacks=[ckpoint_cb, LossMonitor(100)], dataset_sink_mode=True)
-
模型推理
在模型训练完成后,我们可以进行推理,即使用训练好的模型对新的图像进行分类。首先,我们需要加载训练好的模型参数,然后将这些参数加载到我们的模型中。
# 加载模型参数
param_dict = load_checkpoint("./checkpoint_simplecnn-1_1000.ckpt")
load_param_into_net(model, param_dict) # 设置输入图像
# 假设我们有一个预处理后的图像tensor,名为'input_tensor',大小为[1, 3, 32, 32]
# input_tensor = ... # 使用模型进行推理
output = model(input_tensor) # 输出预测结果
predicted_class = output.asnumpy().argmax()
print(f"Predicted class: {predicted_class}")
-
针对RISC-V优化
- RISC-V架构的优化可能涉及多个层面,包括算法层面的优化、框架层面的优化以及硬件层面的优化。这里,我们主要关注框架层面的优化。
- 算法优化:针对RISC-V的特点,如整数运算性能高、内存访问延迟大等,可以优化模型中的算法,减少浮点运算,利用RISC-V的整数运算优势。
- 内存访问优化:RISC-V的内存访问延迟可能较大,因此可以通过减少内存访问次数、优化内存访问模式(如使用缓存友好的数据结构)来减少延迟。
- 模型剪枝与量化:通过模型剪枝减少模型复杂度,通过量化减少模型大小并加速推理。
-
部署与测试
- 在openKylin系统上部署优化后的AI应用,并进行实际测试,确保应用能够稳定运行,并且性能达到预期。

总结:
通过上述步骤,我们展示了如何在openKylin系统上基于MindSpore框架开发并优化一个图像分类AI应用,并部署在RISC-V平台上进行推理。这个过程涉及了模型的构建、训练、推理以及针对特定硬件架构的优化,是AI应用在实际应用中不可或缺的一部分。
相关文章:
基于openKylin与RISC-V的MindSpore AI项目实践
项目目标: 在openKylin系统上安装和配置MindSpore框架。开发一个简单的图像分类模型,并在RISC-V平台上进行训练和推理。根据RISC-V的特性,对MindSpore框架进行必要的优化。 目录 项目目标: 训练模型 编写训练代码,设…...
【牛客】VL64 时钟切换
描述 题目描述: 存在两个同步的倍频时钟clk0 clk1,已知clk0是clk1的二倍频,现在要设计一个切换电路,sel选择时候进行切换,要求没有毛刺。 信号示意图: 波形示意图: 输入描述: clk0 clk1为时…...
Java设计模式——桥连模式
桥接模式简单来说就是通过将抽象部分和具体部分分离,使它们可以独立地变化。如果你的一个类存在多个变化维度(如抽象和具体的实现)。若使用继承来处理这些变化,将会导致类层次结构的急剧增加,难以管理和维护。并且&…...
数据结构与算法:堆排序和TOP-K问题
朋友们大家好,本节内容来到堆的应用:堆排序和topk问题 堆排序 1.堆排序的实现1.1排序 2.TOP-K问题3.向上调整建堆与向下调整建堆3.1对比两种方法的时间复杂度 我们在c语言中已经见到过几种排序,冒泡排序,快速排序(qsor…...
【NR 定位】3GPP NR Positioning 5G定位标准解读(三)
目录 前言 5 NG-RAN UE定位架构 5.1 架构 5.2 UE定位操作 5.3 NG-RAN定位操作 5.3.1 通用NG-RAN定位操作 5.3.2 OTDOA定位支持 5.3.3 广播辅助信息支持 5.3.4 NR RAT相关定位支持 5.4 NG-RAN中与UE定位相关的元素功能描述 5.4.1 用户设备(UE) …...
文件操作与IO(3) 文件内容的读写——数据流
目录 一、流的概念 二、字节流代码演示 1、InputStream read方法 第一个没有参数的版本: 第二个带有byte数组的版本: 第三个版本 搭配Scanner的使用 2、OutputStream write方法 第一个版本: 第二个写入整个数组版本: …...
《PyTorch深度学习实践》第十一讲卷积神经网络进阶
一、 1、卷积核超参数选择困难,自动找到卷积的最佳组合。 2、1x1卷积核,不同通道的信息融合。使用1x1卷积核虽然参数量增加了,但是能够显著的降低计算量(operations) 3、Inception Moudel由4个分支组成,要分清哪些是在Init里定义…...
Ansible的playbook的编写和解析
目录 什么是playbook Ansible 的脚本 --- playbook 剧本 实例部署(使用playbook安装启动httpd服务) 1.编写一个.yaml文件 在主机下载安装http,将配置文件复制到opt目录下 运行playbook 在192.168.17.77主机上查看httpd服务是否成功开启…...
[环境配置]ssh连接报错“kex_exchange_identification: read: Connection reset by peer”
已经被VScode ssh毒死好几次了,都是执行命令意外中断,然后又VSCode里连不上、本机Terminal也连不上了。。。 重启远程服务器,VSCode可以连上了, 系统ssh还是不行,报错“kex_exchange_identification: read: Connecti…...
Mybatis-Plus——04,自动填充时间(新注解)
自动填充(新注解) 一、数据库添加两个字段二、实体类字段属性上增加注解三、编写填充器四、查看结果4.1 插入结果4.2 修改结果 五、同步修改5.1实体类属性改成 INSERT_UPDATE5.2 在填充器的方法这里加上 updateTime5.3 查看结果————————创作不易…...
【动态规划入门】最长上升子序列
每日一道算法题之最长上升子序列 一、题目描述二、思路三、C代码 一、题目描述 题目来源:LeetCode 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 输入格式 第一行包含整数 N。 第二行包含 N个整数,表示完整序列。 输出格式 输出一个整数…...
LabVIEW眼结膜微血管采集管理系统
LabVIEW眼结膜微血管采集管理系统 开发一套基于LabVIEW的全自动眼结膜微血管采集管理系统,以提高眼结膜微血管临床研究的效率。系统集成了自动化图像采集、图像质量优化和规范化数据管理等功能,有效缩短了图像采集时间,提高了图像质量&#…...
通过GitHub探索Python爬虫技术
1.检索爬取内容案例。 2.找到最近更新的。(最新一般都可以直接运行) 3.选择适合自己的项目,目前测试下面画红圈的是可行的。 4.方便大家查看就把代码粘贴出来了。 #图中画圈一代码 import requests import os import rewhile True:music_id input("请输入歌曲…...
【Python】-----基础知识
注释 定义:让计算机跳过这个代码执行用三个单引号/双引号都表示注释信息,在Python中单引号与双引号没有区别,但必须是成对出现 输出与输入 程序是有开始,有结束的,程序运行规则:从上而下,由内…...
如何学习、上手点云算法(二):点云处理相关开源算法库、软件、工具
写在前面 本文内容 一些用于点云处理的开源算法库、软件介绍,主要包含: CloudCompare, MeshLab, PCL, Open3D, VTK, CGAL等 不定时更新 平台/环境 Windows10, Ubuntu1804, CMake, Open3D, PCL 转载请注明出处: https://blog.csdn.net/qq_41…...
为什么会对猫毛过敏?如何缓解?浮毛克星—宠物空气净化器推荐
猫咪过敏通常是因为它们身上的Fel d1蛋白质导致的,这些蛋白质附着在猫咪的皮屑上。猫咪舔毛的过程会带出这些蛋白质,一旦接触就可能引发过敏症状,比如打喷嚏等。因此,减少空气中的浮毛数量有助于减轻过敏现象。猫用空气净化器可以…...
Linux学习-etcdctl安装
etcdctl3.5下载链接 1. 先通过上面链接下载gz包2. 解压 [rootk8s-master ~]# tar xf etcd-v3.5.11-linux-amd64.tar.gz [rootk8s-master etcd-v3.5.11-linux-amd64]# ls Documentation etcd etcdctl etcdutl README-etcdctl.md README-etcdutl.md README.md READMEv2-e…...
Qt应用软件【文件篇】读写文件技巧
文章目录 简介按照偏移读文件按照偏移写文件Qt按行写文件Qt按行读文件注意事项指定文件编码格式UTF8转GBK简介 Qt提供了丰富的API来处理文件读写操作,使得读写文件变得简单。 按照偏移读文件 QFile file("example.txt"); if (file.open(QIODevice::ReadOnly)) {q…...
GO常量指针
Go语言中的常量使用关键字const定义,用于存储不会改变的数据,常量是在编译时被创建的,即使定义在函数内部也是如此,并且只能是布尔型、数字型(整数型、浮点型和复数)和字符串型。 由于编译时的限制&#x…...
微服务间通信重构与服务治理笔记
父工程 依赖版本管理,但实际不引入依赖 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation&…...
卡诺图简化逻辑函数详解
你提供的图片是数字逻辑电路教材中关于**卡诺图(Karnaugh Map)**的内容,主要讲解如何用卡诺图表示和化简逻辑函数。下面我为你逐部分解释:📌 一、核心概念:什么是卡诺图?卡诺图是一种图形化工具…...
实战演练:基于快马AI快速构建竞品价格监控爬虫系统
今天想和大家分享一个非常实用的爬虫实战项目——竞品价格监控系统。这个系统可以帮助我们实时跟踪不同电商平台上同类产品的价格变化,对于市场调研、价格策略制定都很有帮助。下面我会详细介绍整个实现过程,以及我在使用InsCode(快马)平台时的一些体验。…...
这份Java核心知识点整理PDF,几乎涵盖了所有Java岗位的面试题
如果你正在准备Java开发面试,不管是校招还是社招,这份《JAVA核心知识点整理》PDF绝对是你在冲刺阶段最值得收藏的资料之一。它不是那种泛泛而谈的教程,而是直击面试高频考点的题库,包含了近300页的干货,从JVM底层到微服…...
暗黑破坏神2存档编辑器终极指南:5分钟解放你的游戏体验
暗黑破坏神2存档编辑器终极指南:5分钟解放你的游戏体验 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 还在为暗黑破坏神2中反复刷装备而烦恼吗?想快速体验不同职业build却不想从头练级?d2s-e…...
SDXL-Turbo在虚拟现实内容创作中的应用
SDXL-Turbo在虚拟现实内容创作中的应用 1. 引言 虚拟现实内容开发一直面临着一个核心痛点:高质量素材的制作既耗时又费力。传统的VR环境创建需要美术人员手动绘制纹理、设计贴图,一个简单的场景可能就需要数天甚至数周的工作量。 想象一下这样的场景&…...
【车辆】插电式混合动力汽车(PHEV)动力系统进行建模与设计MATLAB 代码,含发动机、电机、电池组等组件
✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。👇 关注我领取海量matlab电子书和数学建模资料🍊个人信条:格物致知,完整Matl…...
Gemma-3 Pixel Studio快速上手:支持表格图像的结构化数据提取技巧
Gemma-3 Pixel Studio快速上手:支持表格图像的结构化数据提取技巧 1. 工具介绍与核心能力 Gemma-3 Pixel Studio是基于Google最新Gemma-3-12b-it模型构建的多模态对话终端,特别擅长处理包含表格的图像数据。与传统OCR工具不同,它不仅能识别…...
开源大模型新范式:Pixel Epic智识终端镜像免配置部署详细步骤
开源大模型新范式:Pixel Epic智识终端镜像免配置部署详细步骤 1. 产品概览 Pixel Epic智识终端是一款基于AgentCPM-Report大模型构建的创新研究报告辅助工具。它将枯燥的科研工作转化为一场像素风格的RPG冒险,让用户以游戏化的方式完成专业报告撰写。 …...
Blender 3MF插件:重塑3D打印数据流转的技术突破
Blender 3MF插件:重塑3D打印数据流转的技术突破 【免费下载链接】Blender3mfFormat Blender add-on to import/export 3MF files 项目地址: https://gitcode.com/gh_mirrors/bl/Blender3mfFormat 一、问题导入:3D打印数据传递的行业痛点与解决方案…...
Qwen3-ASR-1.7B车载场景应用:驾驶语音助手开发
Qwen3-ASR-1.7B车载场景应用:驾驶语音助手开发 1. 引言 开车时操作导航、切歌、调音量,这些看似简单的操作却暗藏风险。低头一秒,车辆就能开出几十米,事故往往就发生在这瞬间。传统的触屏操作不仅分心,还让驾驶变得不…...
