关于Pytorch转换为MindSpore的一点建议

一、事先准备

必须要对Mindspore有一些了解,因为这个框架确实有些和其它流程不一样的地方,比如算子计算、训练过程中的自动微分,所以这两个课程要好好过一遍,官网介绍文档最好也要过一遍
1、零基础Mindspore:https://www.bilibili.com/video/BV1CS4y1z72r/?spm_id_from=333.337.search-card.all.click在这里插入图片描述 2、MindSpore进阶课程:https://www.bilibili.com/video/BV12W4y1t7yn/?spm_id_from=333.337.search-card.all.click
在这里插入图片描述

3、Mindspore教程:MindSpore教程 — MindSpore master documentation
在这里插入图片描述

对这些课程和文档过一遍后,可以去看几个数据加载和模型训练的案例
最好是自定义数据集加载,因为大多数据集都是表格或者其它,图像分类案例较少
跑一下几个案例,理解他们的这个过程

二、框架转换过程注意事项

框架转换主要有以下基本,拿转换医学影像分割的来讲述(pytorch-》Mindspore)
官网也是有给网络迁移部分的要点说明的,也可以好好看看
在这里插入图片描述

转换之前一定要理解自己原有网络当中的每一部分的处理、每一部分的数据形态和类型,这样转换起来比较容易

1、数据集导入

判断好数据集是什么类型,能否用快捷方式加载,如果不能就自定义数据集,然后用GeneratorDataset进行加载
数据加载类,注意最后返回的要是两部分值,前者为数据,后者为标签
在这里插入图片描述

一定要这样,因为GeneratorDataset需要这种形式,期间的计算,每一步可以看看有无问题,形态和原有网络保持一致

2、网络结构搭建

2.1 如果已经有算法,也有网络,那就一层的对比着看,保证每层输入输出一样

在这里插入图片描述

2.2 对应的网络中的API计算,大多都能对应上,主要有部分会有细节差异,需要去官网查询对应API,填写适应参数

如这里和pytorch的就不一样,mindspore中的scale_factor不能和bilinear一起,所有要替换为其它插值方式,另外插值法方式也会影响padding的值
在这里插入图片描述

就是要保证每层的输入输出都一致,计算要正常,如这里mindspore不写stride=2就会导致后面的计算出问题
在这里插入图片描述

2.3 一点一点的对比和尝试,必须要保证网络重每一步的计算前和计算后的数据形态一样

最终的输出也是要保持一致,数据经过网络得到预测值,预测值的shape注意保持一致

3、模型训练

一定要保证数据的准确,在pytorch内是什么形式在mindspore内也要是
对于梯度和loos的计算,多打印出来看一看,虽然pytorch和mindspore训练过程有所不同,但整体还是相似的
在这里插入图片描述

注意label的shape要和模型输出的logit一样,这样才能计算loss,这里可能会有维度不相同,那就去掉无关维度即可,mindspore里也有squeeze,多看看文档
流程就是,训练step内使用gard_fn,进行自动微分计算(这里mindspore用了这就不用梯度清零了),自动微分计算value_and_grad中又会调用前向传播函数,前向传播中涉及到loos的计算,一般只要loss输出没有问题,那么其它都是小事情
注意各项的形式,很容易理解的还是

4、训练和评估

这个过程就很简单了,只要前面定义好训练step和其他的什么优化器、损失函数还有前向传播网络什么的,那么这就很简单了,获取可迭代数据进行一个batch一个batch的训练就行了,loss可以计算可以输出,模型的评估上mindspore里面也有提供一些自定义的评估,看需要用到什么,先去搜搜看,看看如何使用的,直接套用即可
在这里插入图片描述

5、模型保存和调用推理

这部分就很简单了,按照格式定义即可

在这里插入图片描述

三、总结

整体来说,只要数据集构建没有问题,网络结构没有问题(需要计算测试)
那么框架转换就很简单了,因为训练的流程都大致相同,虽然mindspore里面没有梯度清零什么的
但是也有独特的自动微分梯度求导,这个多看几个案例,其实也是一套流程

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

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

相关文章

linux服务器运行pycharm代码

一、pycharm代码上传服务器 1、进行配置 2、建立ssh连接(选择文件传输协议SFTP) 3、设置服务器名(自定义) 4、点击SSH配置右侧的"…",进行SSH内容设置: 5、输入服务器信息 6、进行本地项目与远程…

AIGC系列之一-一文理解什么是Embedding嵌入技术

摘要:嵌入技术(Embedding)是一种将高维数据映射到低维空间的技术,在人工智能与图形学研究中被广泛应用。本文将介绍嵌入技术的基本概念、原理以及在 AIGC(Artificial Intelligence and Graphics Computing)…

基于STM32的智能农业灌溉系统

目录 引言环境准备智能农业灌溉系统基础代码实现:实现智能农业灌溉系统 4.1 数据采集模块4.2 数据处理与分析4.3 控制系统实现4.4 用户界面与数据可视化应用场景:智能农业管理与优化问题解决方案与优化收尾与总结 1. 引言 智能农业灌溉系统通过使用ST…

FPGA学习网站推荐

FPGA学习网站推荐 本文首发于公众号:FPGA开源工坊 引言 FPGA的学习主要分为以下两部分 语法领域内知识 做FPGA开发肯定要首先去学习相应的编程语言,FPGA开发目前在国内采用最多的就是使用Verilog做开发,其次还有一些遗留下来的项目会采用…

智慧校园综合门户有哪些特点?

智慧校园的门户系统,作为整个智慧校园架构的门户窗口,扮演着至关重要的角色。它如同一座桥梁,将校园内的各种信息资源、应用服务以及管理功能紧密相连,为师生、家长及管理人员提供了一个集中访问的便捷通道。智慧校园门户的设计理…

【Java】Java基础语法

一、注释详解 1.1 注释的语法: // 单行注释/*多行注释 *//**文档注释 */ 1.2 注释的特点: 注释不影响程序的执行,在Javac命令进行编译后会将注释去掉 1.3 注释的快捷键 二、字面量详解 2.1 字面量的概念: 计算机是用来处理…

DS:二叉树的链式存储及遍历

​ 欢迎来到Harper.Lee的学习世界! 博主主页传送门:Harper.Lee的博客主页 想要一起进步的uu可以来后台找我哦! ​ 一、引入 1.1 二叉树的存储方式 在之前接触到的满二叉树和完全二叉树使用的是数组的存储方式(DS:树与…

thrift接口调用工具

写了一个thrift接口调用工具 导入thrift文件就可以直接调用相应接口 工具会根据thrift文件中接口的参数名,参数类型,返回值等等,自动生成接口参数,和结果json化显示。 https://github.com/HuaGouFdog/Fdog-Kit

实际项目开发:Spring集成Redis,并实现短信登录功能

redis新手,学了几种基本数据类型,却不知道怎么使用? 总是一边学一边忘? 学会了Redis的大多数使用命令,却不知道如何在项目中使用? 本文将从实际出发,为大家解决这些问题。 我是蚊子码农&#xf…

折线统计图 初级

此为折线统计图的初级题目。 本次的题目较难,菜鸡请退出。 4. 下图显示了甲、乙两台电脑的价格以及它们已使用的年数,从图中可以知道( )。 15. 妈妈去菜市场买菜,走到半路遇到一位熟人聊了一会儿,突然发现忘了带钱。于是马上回…

【Sklearn驯化-环境配置】一文搞懂sklearn建模的最优环境搭建用法

【Sklearn驯化-环境配置】一文搞懂sklearn建模的最优环境搭建用法 本次修炼方法请往下查看 🌈 欢迎莅临我的个人主页 👈这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合,智慧小天地! 🎇 相关内容文档获取 微信…

Kafka中的数据本身就是倾斜的,使用FlinkSQL该如何处理

又是经历了一段不太平的变动,最近算是稳定了点,工作内容又从后端开发转换成了sql boy,又要开始搞大数据这一套了。不同的是之前写实时任务的时候都是用的java代码,新环境却更加偏向与使用flink sql 解决,所以记录下使用…

机器人学习和研究的物质基础包含哪些内容?

为啥写这个? 在很多博客里面提及物质基础,没想到询问的也非常多,写一篇详细一点的。 之前的故事 不合格且失败机器人讲师个人理解的自身课程成本情况-CSDN博客 迷失自我无缘多彩世界-2024--CSDN博客 物质基础与情绪稳定的关系-CSDN博客 …

6.S081的Lab学习——Lab8: locks

文章目录 前言一、Memory allocator(moderate)提示:解析 二、Buffer cache(hard)解析: 三、Barrier (moderate)解析: 总结 前言 一个本硕双非的小菜鸡,备战24年秋招。打算尝试6.S081,将它的Lab逐一实现,并…

Git代码管理的常用操作

在VS022中,Git的管理要先建立本地或远程仓库,然后commit到本地,最后push到远程代码库。 或者不建立本地的情况,直接拉取已有的远程代码。 Git是一个分布式版本控制系统,用于跟踪和管理文件的变化。它可以记录文件的修…

收银系统源码-千呼新零售2.0【线下促销】

千呼新零售2.0系统是零售行业连锁店一体化收银系统,包括线下收银线上商城连锁店管理ERP管理商品管理供应商管理会员营销等功能为一体,线上线下数据全部打通。 适用于商超、便利店、水果、生鲜、母婴、服装、零食、百货等连锁店使用。 详细介绍请查看下…

活用变量,让Postman的使用飞起来

在 Postman 中使用变量是一种非常强大的功能,它可以极大地增强 API 测试和开发的灵活性和效率。 Postman变量的类型 变量在 Postman 中可以在多个层次设置和使用,包括 全局变量环境变量集合变量局部变量(如在脚本中暂时创建的变量&#xf…

【C语言】解决C语言报错:Stack Overflow

文章目录 简介什么是Stack OverflowStack Overflow的常见原因如何检测和调试Stack Overflow解决Stack Overflow的最佳实践详细实例解析示例1:递归调用过深示例2:分配过大的局部变量示例3:嵌套函数调用过多 进一步阅读和参考资料总结 简介 St…

初学者应该掌握的MySQL数据库的基本组成部分及概念

MySQL数据库作为一种开源的关系型数据库管理系统,被广泛应用于Web应用开发和数据存储。它具有高性能、易用性和可靠性等特点,是开发者们的首选之一。在本篇文章中,我们将详细介绍MySQL数据库的核心组成部分,帮助你深入理解这个强大…