昇思25天学习打卡营第1天|快速入门实操教程

news2024/9/9 0:50:50

昇思25天学习打卡营第1天|快速入门实操教程

目录

昇思25天学习打卡营第1天|快速入门实操教程

一、MindSpore内容简介

主要特点:

MindSpore的组成部分:

二、入门实操步骤

1. 安装必要的依赖包

2. 下载并处理数据集

3. 构建网络模型

4. 训练模型

5. 测试模型性能

6. 进行多轮训练

7. 示例输出

总结

 博主v:XiaoMing_Java

博主v:XiaoMing_Java


一、MindSpore内容简介

本文主要是借助昇思大模型平台的Jupyter云上开发学习昇思MindSpore入门知识

昇思MindSpore是一个全场景深度学习框架,旨在实现易开发、高效执行、全场景统一部署三大目标。

设计目标是使得深度学习的开发变得更加简单高效,并提供统一的部署方案。它能够支持多种运行环境,包括云端、边缘和终端设备。

主要特点:

  1. 易开发:MindSpore 提供了友好的API接口,使得开发者可以快速上手,同时调试过程也变得更加直观。
  2. 高效执行:框架在计算效率、数据预处理和分布式训练方面进行了优化,可以充分利用硬件资源。
  3. 全场景支持:无论是在云端还是边缘设备,甚至是小型IoT设备,MindSpore都能提供良好的支持。

MindSpore的组成部分:

  • ModelZoo(模型库):提供丰富的深度学习算法模型,开发者也可以贡献自己的模型。
  • MindSpore Extend(扩展库):支持领域扩展,如图神经网络(GNN)、深度概率编程等。
  • MindSpore Science(科学计算):专为科学计算设计,包含领先的数据集和高精度模型。
  • MindExpression(全场景统一API):支持Python前端表达与编程接口,简化开发流程。
  • MindSpore Data(数据处理层):提供高效的数据处理和常用数据集加载功能。
  • MindCompiler(AI编译器):优化计算图,支持各种硬件加速。
  • MindRT(运行时系统):实现高效的运行时支持,适用于不同场景。
  • MindSpore Insight(可视化调试工具):提供可视化训练监控和调优能力。
  • MindSpore Armour(安全增强库):针对企业级应用提供安全与隐私保护功能。

二、入门实操步骤

接下来,我们将通过MindSpore的API来快速构建和训练一个简单的深度学习模型。

1. 安装必要的依赖包

首先,在进行任何开发之前,您需要确保已经安装了MindSpore及其相关依赖。可以使用以下命令进行安装:

pip install mindspore

然后我们导入所需的库:

import mindspore
from mindspore import nn
from mindspore.dataset import vision, transforms
from mindspore.dataset import MnistDataset

2. 下载并处理数据集

在我们的示例中,我们将使用MNIST数据集,这是一个经典的手写数字识别数据集。下面是下载该数据集的代码:

# 导入下载工具
from download import download
 
# 定义数据集的URL
url = "https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/notebook/datasets/MNIST_Data.zip"
# 下载数据集并解压
path = download(url, "./", kind="zip", replace=True)

3. 构建网络模型

接下来,我们定义一个简单的神经网络模型,该模型由多个全连接层和ReLU激活函数组成:

# 定义模型结构
class Network(nn.Cell):
    def __init__(self):
        super().__init__()
        self.flatten = nn.Flatten()  # 扁平化层
        self.dense_relu_sequential = nn.SequentialCell(
            nn.Dense(28*28, 512),  # 输入层到隐藏层
            nn.ReLU(),              # 激活函数
            nn.Dense(512, 512),     # 隐藏层到隐藏层
            nn.ReLU(),
            nn.Dense(512, 10)       # 隐藏层到输出层
        )
 
    def construct(self, x):
        x = self.flatten(x)          # 扁平化输入数据
        logits = self.dense_relu_sequential(x)  # 前向传播
        return logits
 
model = Network()
print(model)  # 打印模型结构

4. 训练模型

接下来,我们需要定义损失函数和优化器,然后编写训练步骤:

# 实例化损失函数和优化器
loss_fn = nn.CrossEntropyLoss()  # 使用交叉熵损失
optimizer = nn.SGD(model.trainable_params(), learning_rate=1e-2)  # Stochastic Gradient Descent

# 定义前向传播函数
def forward_fn(data, label):
    logits = model(data)  # 模型预测
    loss = loss_fn(logits, label)  # 计算损失
    return loss, logits

# 获取梯度函数
grad_fn = mindspore.value_and_grad(forward_fn, None, optimizer.parameters, has_aux=True)

# 定义单步训练函数
def train_step(data, label):
    (loss, _), grads = grad_fn(data, label)  # 计算损失和梯度
    optimizer(grads)  # 更新参数
    return loss
 
def train(model, dataset):
    size = dataset.get_dataset_size()  # 数据集大小
    model.set_train()  # 设置模型为训练模式
    for batch, (data, label) in enumerate(dataset.create_tuple_iterator()):
        loss = train_step(data, label)  # 单步训练
 
        if batch % 100 == 0:
            loss, current = loss.asnumpy(), batch  # 转换为numpy格式
            print(f"loss: {loss:>7f}  [{current:>3d}/{size:>3d}]")

5. 测试模型性能

编写测试函数以评估模型在测试集上的表现:

def test(model, dataset, loss_fn):
    num_batches = dataset.get_dataset_size()  # 测试集大小
    model.set_train(False)  # 设置模型为评估模式
    total, test_loss, correct = 0, 0, 0
    for data, label in dataset.create_tuple_iterator():
        pred = model(data)  # 模型预测
        total += len(data)  # 累计样本数
        test_loss += loss_fn(pred, label).asnumpy()  # 计算总损失
        correct += (pred.argmax(1) == label).asnumpy().sum()  # 计算正确预测数
    test_loss /= num_batches  # 平均损失
    correct /= total  # 正确率
    print(f"Test: \n Accuracy: {(100*correct):>0.1f}%, Avg loss: {test_loss:>8f} \n")

6. 进行多轮训练

训练过程需要多次迭代数据集,一次完整的迭代称为一轮(epoch)。可以使用如下代码进行训练和测试:

epochs = 3  # 设置训练轮数
for t in range(epochs):
    print(f"Epoch {t+1}\n-------------------------------")
    train(model, train_dataset)  # 训练
    test(model, test_dataset, loss_fn)  # 测试结果
print("Done!")

7. 示例输出

在每一轮训练后,您将会看到如下输出:

总结

通过上述步骤,我们成功地使用MindSpore构建并训练了一个简单的深度学习模型,并验证了模型的性能。这一过程展示了MindSpore的易用性和强大功能,非常适合新手入门学习。

在实际操作中,您可以根据需要调整模型的结构、超参数以及数据集,以探索更多深度学习技术的可能性。希望本教程对您有所帮助!

 博主v:XiaoMing_Java

博主v:XiaoMing_Java

 📫作者简介:嗨,大家好,我是 小 明(小明java问道之路),互联网大厂后端研发专家,2022博客之星TOP3 / 博客专家 / CSDN后端内容合伙人、InfoQ(极客时间)签约作者、阿里云签约博主、全网5万粉丝博主。


🍅 文末获取联系 🍅  👇🏻 精彩专栏推荐订阅收藏 👇🏻

专栏系列(点击解锁)

学习路线(点击解锁)

知识定位

🔥Redis从入门到精通与实战🔥

Redis从入门到精通与实战

围绕原理源码讲解Redis面试知识点与实战

🔥MySQL从入门到精通🔥

MySQL从入门到精通

全面讲解MySQL知识与企业级MySQL实战

🔥计算机底层原理🔥

深入理解计算机系统CSAPP

以深入理解计算机系统为基石,构件计算机体系和计算机思维

Linux内核源码解析

围绕Linux内核讲解计算机底层原理与并发

🔥数据结构与企业题库精讲🔥

数据结构与企业题库精讲

结合工作经验深入浅出,适合各层次,笔试面试算法题精讲

🔥互联网架构分析与实战🔥

企业系统架构分析实践与落地

行业最前沿视角,专注于技术架构升级路线、架构实践

互联网企业防资损实践

互联网金融公司的防资损方法论、代码与实践

🔥Java全栈白宝书🔥

精通Java8与函数式编程

本专栏以实战为基础,逐步深入Java8以及未来的编程模式

深入理解JVM

详细介绍内存区域、字节码、方法底层,类加载和GC等知识

深入理解高并发编程

深入Liunx内核、汇编、C++全方位理解并发编程

Spring源码分析

Spring核心七IOC/AOP等源码分析

MyBatis源码分析

MyBatis核心源码分析

Java核心技术

只讲Java核心技术

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

WIN下的文件病毒

文件病毒 一.windows下知识句柄禁用某些警告MAX_PATH_WIN32_FIND_DATAWFindFirstFileW注册到服务代码(自启动)隐藏窗口 二.客户端代码三.服务端代码 一.windows下知识 句柄 相当于指针,用来表示windows下的一些对象; 禁用某些警…

vue3中使用ant-design-vue

ant-design-vue官网:Ant Design Vue — An enterprise-class UI components based on Ant Design and Vue.jsAn enterprise-class UI components based on Ant Design and Vuehttps://www.antdv.com/components/overview-cn/ 安装 npm i -S ant-design-vue 引入 …

前端实现【 批量任务调度管理器 】demo优化

一、前提介绍 我在前文实现过一个【批量任务调度管理器】的 demo,能实现简单的任务批量并发分组,过滤等操作。但是还有很多优化空间,所以查找一些优化的库, 主要想优化两个方面, 上篇提到的: 针对 3&…

“数说”巴黎奥运会上的“中国智造”成果

引言:随着“中国智造”在欧洲杯上方兴未艾,在巴黎奥运会上,中国智造继续以多种形式和领域展现了其强大的实力和创新能力。以格力公开表示将为巴黎奥运村提供345台格力空调,为中国制造的清凉送至巴黎事件拉开中国制造闪亮巴黎奥运会…

CTF Web SQL注入 10000字详解

这里写目录标题 涉及的数据库知识unionorder bydatabase()information_schemalimit--空格注释replaceinto outfilelikeGROUP BYHAVINGGROUP BY、HAVING、WHERE之间的关系regexp 原理信息收集操作系统数据库判断注入点注入点类型POST注入数字型注入字符型注入搜索型注入Insert/u…

Debian12 安装Docker 用 Docker Compose 部署WordPress

服务器准备: 以root账号登录,如果不是root,后面指令需要加sudo apt update apt install apt-transport-https ca-certificates curl gnupg lsb-release添加GPG密钥,推荐国内源 curl -fsSL https://mirrors.aliyun.com/docker…

ArchLinux部署waydroid

在Arch Linux系统上部署Waydroid运行Android APP 文章目录 在Arch Linux系统上部署Waydroid运行Android APP1. 安装要求2. 本机环境3. 安装 Waydroid4. 网络配置5.注册Google设备6. 运行效果图 Waydroid是Anbox配合Haliun技术开发的LXC Android容器,可在GUN/Linux系…

C语言中的指针基础

文章目录 🍊自我介绍🍊地址🍊C语言中的指针 你的点赞评论就是对博主最大的鼓励 当然喜欢的小伙伴可以:点赞关注评论收藏(一键四连)哦~ 🍊自我介绍 Hello,大家好,我是小珑也要变强&am…

Spring Boot 3 + Resilience4j 简单入门 + Redis Cache 整合

1. 项目结构 2. Maven依赖 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.1.2</version><relativePath/> <!-- lookup parent from repository --&…

CSRF Token 原理

CSRF 攻击 CSRF 攻击成功的关键是&#xff0c;恶意网站让浏览器自动发起一个请求&#xff0c;这个请求会自动携带 cookie &#xff0c;正常网站拿到 cookie 后会认为这是正常用户&#xff0c;就允许请求。 防范 如果在请求中加一个字段&#xff08;CSRF Token&#xff09;&am…

C++笔记之指针基础

函数重载:(C++特性) 定义: C++允许函数重名,但是参数列表要有区分 在相同的作用域定义同名的函数,但是它们的参数要有所区分,这样的多个函数构成重载关系 objdump -d test.exe >log.txt 将test.exe反汇编并将结果重定向到log.txt 文件中 ,然后在 log.txt中找到定…

学习网络安全 为什么Linux首择Kali Linux? 以及如何正确的使用Kali Linux

1.什么是kali linux&#xff1f; Kali Linux是一款基于Debian的Linux发行版&#xff0c;主要用于网络安全测试和渗透测试。它由全球顶尖的安全专家和黑客社区维护开发&#xff0c;提供了丰富的工具和资源&#xff0c;用于测试安全性、漏洞利用和渗透测试。此外&#xff0c;Kal…

MySQL 性能调优

文章目录 一. MySQL调优金字塔1. 架构调优2. MySQL调优3. 硬件和OS调优4. 小结 二. 查询性能调优三. 慢查询1. 概念2. 优化数据访问3. 请求了不需要数据&#xff0c;怎么做4. 是否在扫描额外的记录5. 慢查询相关配置 & 日志位置6. 小结 四. 查询优化器五. 实现调优手段 一.…

24、Python之面向对象:责任与自由,私有属性真的有必要吗

引言 前面我们进一步介绍了类定义中属性的使用&#xff0c;今天我们对中关于属性私有化的话题稍微展开聊一下&#xff0c;顺便稍微理解一下Python设计的相关理念。 访问级别 在其他编程语言中&#xff0c;比如Java&#xff0c;关于类中的属性和方法通过关键字定义明确的访问级…

1、仓颉工程基础操作 cjpm

文章目录 1. 仓颉工程创建方式2. cjpm2.1 init 初始化工程2.2 run 运行工程 1. 仓颉工程创建方式 使用 cangjie studio 通过cangjie studio 创建 使用vscode插件 通过 VSCode 命令面板创建仓颉工程通过可视化界面创建仓颉工程 cjpm 注&#xff1a;具体使用参考官方文档&#…

探索分布式光伏运维系统的组成 需要几步呢?

前言 随着光伏发电的不断发展&#xff0c;对于光伏发电监控系统的需求也日益迫切&#xff0c;“互联网”时代&#xff0c;“互联网”的理念已经转化为科技生产的动力&#xff0c;促进了产业的升级发展&#xff0c;本文结合“互联网”技术提出了一种针对分散光伏发电站运行数据…

浅谈Devops

1.什么是Devops DevopsDev&#xff08;Development&#xff09;Ops&#xff08;Operation&#xff09; DevOps&#xff08;Development和Operations的混合词&#xff09;是一种重视“软件开发人员&#xff08;Dev&#xff09;”和“IT运维技术人员&#xff08;Ops&#xff09;”…

asp.net mvc 三层架构开发商城系统需要前台页面代完善

一般会后端开发&#xff0c;都不太想写前台界面&#xff0c;这套系统做完本来想开源&#xff0c;需要前台界面&#xff0c;后台已开发&#xff0c;有需求的朋友&#xff0c;可以开发个前端界面完善一下&#xff0c;有的话可以私聊发给我啊

The Llama 3 Herd of Models 第6部分推理部分全文

第1,2,3部分 介绍,概览和预训练 第4部分 后训练 第5部分 结果 6 Inference 推理 我们研究了两种主要技术来提高Llama 3405b模型的推理效率:(1)管道并行化和(2)FP8量化。我们已经公开发布了FP8量化的实现。 6.1 Pipeline Parallelism 管道并行 当使用BF16数字表示模型参数时…

VirtualBox创建共享磁盘

VirtualBox创建共享磁盘 目录 VirtualBox创建共享磁盘1、划分共享磁盘1.1、【管理】->【工具】->【虚拟介质管理】1.2、【创建】->【VDI&#xff08;VirtualBox 磁盘映像&#xff09;】->【下一步】1.3、【预先分配全部空间】->【下一步】1.4、【分配大小】->…