当前位置: 首页 > article >正文

初探 MindSpore(三):把最小网络接上训练

初探 MindSpore三把最小网络接上训练前两篇只处理了网络定义本身nn.Module - nn.Cellforward() - construct()但只会写前向网络还不够。对 PyTorch 用户来说下一步真正需要搞清楚的是MindSpore 里的一步训练是怎么组织起来的。这一篇只讲最小训练闭环不讲数据集、不讲完整工程结构也不讨论高阶训练技巧。目标只有一个把一个最小网络依次接上损失函数、优化器和一步训练封装看清 MindSpore 的训练骨架。训练结构如果先把结构压缩成一句话MindSpore 的最小训练闭环可以理解为网络Cell-WithLossCell- 优化器 -TrainOneStepCell这不是写法偏好而是官方文档已经明确给出的封装方式WithLossCell用损失函数包装网络输入 data 和 label输出 loss。TrainOneStepCell再用优化器包装训练网络在construct中创建反向图并更新参数。因此第三篇最重要的不是再去对照更多层而是先把这条训练链条看清楚。第一步先有一个最小网络先沿用第二篇里的最小网络。这里仍然只保留一个线性层importmindspore.nnasnnclassNet(nn.Cell):def__init__(self):super().__init__()self.fcnn.Dense(10,2)defconstruct(self,x):returnself.fc(x)到这里为止网络只定义了前向计算还没有损失函数也没有训练步骤。它只能做推理不能直接完成“一步训练”。第二步给网络接上损失函数MindSpore 官方WithLossCell文档对它的作用定义得很明确它是“带损失函数的 Cell”用损失函数包装网络输入 data 和 label返回计算得到的 loss。也就是说在 MindSpore 里训练通常不是直接拿“纯网络”开训而是先把网络和 loss 接成一个新的 Cell。例如最小写法可以这样组织importmindspore.nnasnn netNet()loss_fnnn.MSELoss()net_with_lossnn.WithLossCell(net,loss_fn)这里的结构变化很直接net负责前向输出loss_fn负责把预测值和标签变成标量损失net_with_loss变成一个新的 Cell它的输出不再是网络原始输出而是 loss这一层封装很重要。因为从这里开始训练关注的对象已经不是“网络输出是什么”而是“loss 怎么被构造出来”。第三步给参数接上优化器只有 loss 还不够还需要优化器来更新参数。MindSpore 官方Adam文档把它定义为 Adam 优化器实现作用是根据梯度更新参数。最小写法如下optimizernn.Adam(net.trainable_params(),learning_rate1e-3)这里有两个点需要注意。第一优化器拿到的是可训练参数。第二优化器不是直接包WithLossCell而是在下一步交给TrainOneStepCell去统一接入。也就是说到这一步为止训练链条已经有了三段netnet_with_lossoptimizer但还没有真正形成“一步训练”的执行单元。第四步用TrainOneStepCell封装一步训练这是第三篇最关键的部分。MindSpore 官方TrainOneStepCell文档明确写到它是网络训练封装类用优化器包装网络反向图会在construct函数中创建并用于更新参数。这意味着MindSpore 把“一步训练”本身也封装成了一个 Cell。最小写法如下train_stepnn.TrainOneStepCell(net_with_loss,optimizer)到这里结构终于闭合了Net定义前向WithLossCell把网络和 loss 接起来Adam定义参数更新规则TrainOneStepCell把“前向 loss 反向 参数更新”封成一步训练这也是第三篇真正要说明的事MindSpore 的训练不是额外漂浮在网络外面的一堆过程代码而是继续沿着 Cell 体系封装。一个最小训练闭环把上面的部分拼起来就是一个最小训练示例importnumpyasnpimportmindsporeasmsimportmindspore.nnasnnclassNet(nn.Cell):def__init__(self):super().__init__()self.fcnn.Dense(10,2)defconstruct(self,x):returnself.fc(x)netNet()loss_fnnn.MSELoss()net_with_lossnn.WithLossCell(net,loss_fn)optimizernn.Adam(net.trainable_params(),learning_rate1e-3)train_stepnn.TrainOneStepCell(net_with_loss,optimizer)xms.Tensor(np.random.randn(4,10),ms.float32)labelms.Tensor(np.random.randn(4,2),ms.float32)losstrain_step(x,label)print(loss)这段代码的意义不是“已经能训练出一个有价值的模型”而是把 MindSpore 里最小训练单元的结构一次性摆出来。对 PyTorch 用户来说这里最值得注意的不是MSELoss或Adam本身而是训练过程被分成了两层封装先把网络和 loss 变成一个新的 Cell再把这个训练网络和优化器变成一步训练 Cell为什么这里还要专门引入WithLossCell很多 PyTorch 用户看到这里最容易冒出来的问题是为什么不直接在训练步骤里手写 loss而要单独插一个WithLossCell。原因很简单因为 MindSpore 官方就是把这一步明确抽象出来了。WithLossCell的文档说明已经写得很清楚它接受 data 和 label 作为输入返回计算得到的 loss。这件事的重要性不在于“少写几行代码”而在于它进一步说明了 MindSpore 的组织方式前向网络是 Cell带损失的训练网络还是 Cell一步训练封装依然是 Cell也就是说训练过程不是跳出网络定义体系另外开一套而是不断在现有Cell之上继续包装。这和 PyTorch 的直觉差别在哪里如果从 PyTorch 习惯出发很多人会更自然地把训练理解成一个 loop前向、算 loss、backward()、optimizer.step()。MindSpore 当然同样要完成这些事但它在官方接口层面上更强调把这些步骤收进封装后的 Cell 里。这不是说两者训练本质不同而是说MindSpore 更强调把训练步骤本身对象化、结构化。这也是为什么在前两篇里Cell必须先讲。因为如果不先接受Cell是基本单位第三篇这里的WithLossCell和TrainOneStepCell就会显得很突然但如果前两篇的基础已经建立好这一层封装就很自然。本文范围第三篇不继续展开数据集、训练循环和评估流程是因为到这里为止最关键的结构已经完整了。官方教程把模型训练概括成四步构建数据集、定义网络、定义超参数/损失/优化器、输入数据进行训练与评估。这一篇只刻意取了其中最核心的一段网络、损失、优化器和一步训练封装。如果现在继续往下写数据集和完整训练 loop重点就会被稀释。对 PyTorch 用户来说第三篇真正应该先吃透的不是“怎么写更多样板代码”而是MindSpore 把一步训练也继续封装进了Cell体系。结论第三篇只建立一个结论MindSpore 的最小训练闭环不是“网络 optimizer”这么简单而是Net - WithLossCell - Optimizer - TrainOneStepCell这条封装链。如果压缩成三条就是网络先写成Cell损失先包成WithLossCell一步训练再包成TrainOneStepCell这也是 PyTorch 用户进入 MindSpore 训练部分时最先应该建立的结构理解。

相关文章:

初探 MindSpore(三):把最小网络接上训练

初探 MindSpore(三):把最小网络接上训练 前两篇只处理了网络定义本身: nn.Module -> nn.Cellforward() -> construct() 但只会写前向网络还不够。对 PyTorch 用户来说,下一步真正需要搞清楚的是:Mind…...

快速上手Qwen2.5-7B微调:单卡10分钟,打造专属对话机器人

快速上手Qwen2.5-7B微调:单卡10分钟,打造专属对话机器人 1. 为什么你需要尝试Qwen2.5-7B微调 1.1 大模型微调的价值 想象一下,你有一个非常聪明的助手,但它总是以标准化的方式回答所有问题。现在,你想让它记住你的个…...

STM32版FX2N源码与原理图解析:C语言编译的PLC通信程序移植与应用指南

STM32版FX2N源码&原理图&PCB板(可直接移植) FX2N源码V3.8版的使用基本说明: 编译语言:C语言 FX2N源码V3.8版是根据三菱FX2N的PLC通信协议、通信命令以及基于STM32F103系列单片机上编写运行的程序,可以直接利用三菱编程软件编写梯形图…...

简历制作效率革命:Reactive-Resume全场景应用指南

简历制作效率革命:Reactive-Resume全场景应用指南 【免费下载链接】Reactive-Resume AmruthPillai/Reactive-Resume: 是一个基于 React 和 Firebase 的简历生成工具。适合对 Web 开发和简历制作有兴趣的人,特别是想快速生成个性化简历的人。特点是提供了…...

Windows系统高效预览WebP图片的插件解决方案

1. 为什么Windows系统需要WebP预览插件? 如果你经常从网上下载图片素材,或者和设计师同事打交道,最近两年肯定会发现一种后缀名为.webp的图片越来越多。这种由Google推出的图像格式,用手机拍张照片存成WebP格式,文件大…...

MedGemma 1.5新手入门:三分钟搞定本地医疗AI问答系统

MedGemma 1.5新手入门:三分钟搞定本地医疗AI问答系统 1. 为什么选择本地医疗AI助手 在医疗健康领域,隐私保护和专业可靠性是两个最核心的需求。传统在线医疗AI存在三个明显痛点:健康数据需要上传云端、回答过程像黑盒子无法验证、网络依赖性…...

电力系统新手必看:5分钟搞定IEEE5节点Simulink潮流仿真(附MATLAB代码)

电力系统仿真实战:5分钟掌握IEEE5节点Simulink潮流计算核心技巧 从零开始的电力系统仿真之旅 第一次打开Simulink面对空白的建模画布时,那种无从下手的感觉我至今记忆犹新。作为电力系统分析的基础,潮流计算就像电力工程师的"ABC"&…...

Keil5 MDK在Cortex M系列关于分散加载文件说明指导

类别内容摘要本文结合 SRAM 示例工程,说明如何在Cortex M( LCM32F067 )工程中使用 Keil 分散加载文件,将部分函数固定到指定 Flash 地址运行,并将部分函数搬运到指定 RAM 地址运行。源代码路径链接: https://pan.baidu…...

ESP32音频开发指南:如何用ESP-ADF的I2S Stream实现高质量音频输出

ESP32音频开发实战:基于I2S Stream的高保真音频输出全解析 在物联网和智能硬件快速发展的今天,音频处理能力已成为嵌入式设备的重要功能之一。ESP32作为一款高性价比的Wi-Fi/蓝牙双模芯片,凭借其强大的处理能力和丰富的外设接口,在…...

火山方舟 Coding Plan 服务变更公告

亲爱的火山方舟 Coding Plan 用户朋友们:大家好!首先由衷感谢大家对火山方舟 Coding Plan 的喜爱与支持!自产品上线以来,我们收到了远超预期的用户热情,无数订阅者通过 Coding Plan 享受到了高效、便捷的 AI 提效服务&…...

python+Ai技术框架的基于与.的个人健康档案管理系统django flask

目录技术选型与框架对比系统模块设计实现步骤部署与扩展关键注意事项项目技术支持可定制开发之功能创新亮点源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作技术选型与框架对比 Django:适合快速构建全功能应用,自带O…...

PostgreSQL时间戳插入踩坑实录:为什么to_date函数会丢失时分秒?

PostgreSQL时间戳处理深度解析:从to_date陷阱到跨数据库兼容实践 在数据库开发中,时间戳处理看似简单却暗藏玄机。许多从Oracle转向PostgreSQL的开发者都会惊讶地发现,原本在Oracle中运行良好的日期处理代码,到了PostgreSQL环境下…...

三菱FX5U与欧姆龙E5CC温控器的通讯实现

三菱FX5U与3台欧姆龙E5CC温控器通讯程序(SL5U-1) 功能:通过三菱FX5U本体485口,结合触摸屏网口,实现对3台欧姆龙E5CC温控器设定温度,读取温度。 反应灵敏,通讯稳定可靠。 器件:三菱FX5UPLC,3台欧…...

手把手教你用AppleScript和Launchd定时重启Mac TouchBar(含日志记录)

深度解析:如何通过自动化脚本优化Mac TouchBar的稳定性 TouchBar作为MacBook Pro的标志性功能,虽然提升了交互体验,但长期使用后容易出现闪烁、卡顿等问题。本文将系统性地介绍如何利用AppleScript和Launchd构建一套完整的TouchBar维护方案&a…...

积木报表达梦数据库适配:零代码可视化工具无缝集成方案

积木报表达梦数据库适配:零代码可视化工具无缝集成方案 【免费下载链接】jimureport 「数据可视化工具:报表、大屏、仪表盘」积木报表是一款类Excel操作风格,在线拖拽设计的报表工具和和数据可视化产品。功能涵盖: 报表设计、大屏设计、打印设…...

二叉树展开链表

https://leetcode.cn/problems/flatten-binary-tree-to-linked-list/description/?envTypestudy-plan-v2&envIdtop-100-liked 题目 思路 先序遍历:跟 -> 左 -> 右 。最后我们要拼接成的序列为 1 -> 2 -> 3 -> 4 -> 5 -> 6 如果正着做&…...

Docker版OnlyOffice中文字体配置全攻略:从字号调整到字体添加

Docker版OnlyOffice中文字体配置全攻略:从字号调整到字体添加 在企业文档协作和教育课件制作中,中文排版规范直接影响内容的专业性和可读性。对于使用Docker部署OnlyOffice的用户来说,默认配置往往无法满足中文排版需求。本文将深入探讨如何通…...

3D 点云处理(PCL)

PCL(点云库)是我们从2D视觉迈向3D空间理解的“三维感知核心”。在掌握OpenCV的基础上,PCL将帮助把内窥镜的2D图像信息,扩展到完整的三维手术空间理解——这正是精准手术导航的基础。 基于之前已经接触过的PCL内容,提供…...

为什么说学编程不如直接去学网络安全?

一、先看一组扎心对比:市场真的不一样 程序员 :2024 智联招聘数据显示,Java 开发岗平均 1 岗 38 人竞争,应届生起薪中位数仅 7800 元;某大厂 2024 校招开发岗简历通过率不足 5%,且明确要求 “211/985 或顶…...

掌握ConfuserEx:从入门到精通的.NET程序混淆保护实战指南

掌握ConfuserEx:从入门到精通的.NET程序混淆保护实战指南 【免费下载链接】ConfuserEx An open-source, free protector for .NET applications 项目地址: https://gitcode.com/gh_mirrors/co/ConfuserEx ConfuserEx是一款开源免费的.NET程序保护工具&#x…...

手把手教你设计反激式开关电源:从PWM控制到高频变压器选型(附完整电路图)

手把手教你设计反激式开关电源:从PWM控制到高频变压器选型(附完整电路图) 在电子设备小型化与高效化的趋势下,反激式开关电源凭借其结构简单、成本低廉的优势,成为100W以内功率场景的首选方案。无论是家用电器辅助电源…...

Keil MDK-ARM避坑指南:STM32开发环境搭建中的5个常见错误及解决方法

Keil MDK-ARM避坑指南:STM32开发环境搭建中的5个常见错误及解决方法 当你第一次打开Keil MDK-ARM准备开始STM32开发之旅时,可能会被各种报错信息、许可证问题和Pack包加载失败搞得一头雾水。作为一款在嵌入式开发领域广泛使用的IDE,Keil MDK-…...

Qt5离线安装包下载终极指南:绕过IP限制的3种实用方法(含迅雷链接)

Qt5离线安装包高效获取方案:开发者必备的三种技术路径 对于国内开发者而言,获取Qt5离线安装包常常会遇到"Download from your IP address is not allowed"的提示。这并非技术障碍,而是网络环境导致的资源访问限制。本文将系统性地介…...

乡合农服土壤改良:给土地“治病”,让丰收“生根”

在什邡市洛水镇银池村的蒜田里,种植大户黎昌勇抓起一把泥土,眼角笑意满满:“这地真的‘活’过来了!”三年前,这片田土壤酸化严重,种下的大蒜不是瘦小枯黄,就是中途坏死,收成远不及以…...

避开这5个坑!Grafana饼图面板使用中的常见错误及解决方案

避开这5个坑!Grafana饼图面板使用中的常见错误及解决方案 在数据可视化领域,Grafana的Piechart panel(饼图面板)因其直观的表现形式而广受欢迎。然而,许多用户在从入门到精通的路上,常常会遇到一些看似简单…...

Python 中的并发 —— 多进程

摘要:本文介绍了Python中的多进程编程方法,重点对比了多进程与多线程的差异。多进程通过利用多个CPU核心实现真正并行,能有效规避Python的GIL限制。文章详细讲解了三种启动进程的方式(Fork/Spawn/Forkserver)&#xff…...

AI 智能体(AI Agent)的开发费

在 2026 年的国内市场,AI 智能体(AI Agent)的开发费用已经告别了早期的“盲目喊价”,形成了以复杂度和落地场景为核心的定价逻辑。以下是目前国内主流的费用构成和估算参考:1. 基础型:知识库与简单问答 (RA…...

避坑指南:Win11+Docker部署Spark集群时你一定会遇到的5个问题(附解决方案)

Win11Docker部署Spark集群实战避坑手册:从端口冲突到资源优化的全链路解决方案 当你在Windows 11上尝试用Docker搭建Spark集群时,可能会遇到一系列令人抓狂的问题——端口被占用、目录权限报错、Hadoop集成失败、Web UI无法访问,甚至资源分配…...

FPGA车牌识别demo 软件用的Vivado2020.2 板子用的正点原子达芬奇ProA7-...

FPGA车牌识别demo 软件用的Vivado2020.2 板子用的正点原子达芬奇ProA7-100T,下载到板子插好摄像头显示屏即可用。 功能包括:基于阈值的车牌识别,字符分割及HDMI显示,特征识别与字符库进行匹配,将捕捉到的车牌打印到串口显示。实验…...

百度网盘不限速下载方案对比:2026年主流工具实测与选择指南

百度网盘作为国内使用最广泛的云存储服务之一,资源丰富、分享便捷,但非会员下载速度常常成为用户痛点。近年来,随着技术迭代和用户需求变化,各种辅助下载方案层出不穷,从经典的Pandownload到如今主流的多线程组合工具&…...