摘要:MindSpore给大家提供了很多算子进行使用,今天给大家简单介绍下常用的一些算子使用时需要注意的内容。

本文分享自华为云社区《【MindSpore易点通】算子使用经验总结》,作者:Skytier。

MindSpore给大家提供了很多算子进行使用,今天给大家简单介绍下常用的一些算子使用时需要注意的内容。

使用mindspore.nn.BatchNorm注意momentum参数

Batch Normalization里有一个momentum参数, 该参数作用于mean和variance的计算上, 保留了历史Batch里的mean和variance值,即moving_mean和moving_variance, 借鉴优化算法里的Momentum算法将历史Batch里的mean和variance的作用延续到当前Batch。

经验总结:

MindSpore中BatchNorm1d、BatchNorm2d的momentum参数(定义该参数的变量名称为momentum_ms),该参数与PyTorch里BN的momentum参数(定义该参数的变量名称为momentum_py)的关系为:

momentum_ms = 1−momentum_py

使用mindspore.nn.Dropout注意prob参数

dropout算子的prob参数是用来设置节点值为0的概率

经验总结:

MindSpore中dropout的keep_prob参数,该参数与PyTorch里dropout的p参数的关系为: keep_prob=1−p

使用mindspore.nn.SmoothL1Loss注意问题

在网络训练中,一般会把Loss的结果对Batch Size求平均;PyTorch的Loss算子一般会有是否求平均的参数,而MindSpore里面的Loss算子没有这个参数。

经验总结:

mindspore.nn.SmoothL1Loss(beta=1.0)没有做平均,需要自己做求均值操作,否则可能会出现:

ERROR, updateOutputDesc, Update output desc failed, unknown output shape type

具体示例代码如下:

import numpy as np
import mindspore.nn as nnfrom mindspore.nn.loss.loss
import _Lossfrom mindspore
import Tensorfrom mindspore.ops
import operations as Pfrom mindspore.common
import dtype as mstype
class CheckSmoothL1(_Loss):
def __init__(self, mean_dim=0):
super(CheckSmoothL1, self).__init__()
self.smooth_l1_loss = nn.SmoothL1Loss(beta=1.0)
self.mean = P.ReduceMean(keep_dims=False)
self.mean_dim = mean_dim
def construct(self, input, target):
out = self.smooth_l1_loss(input, target)
mean_loss = self.mean(out, self.mean_dim) #需要自己做求均值的操作
return mean_loss
loss_op = CheckSmoothL1(mean_dim=0)
input_data = Tensor(np.array([1, 2, 3]), mstype.float32)
target_data = Tensor(np.array([1, 2, 2]), mstype.float32)
loss = loss_op(input_data, target_data)

使用mindspore.ops.operations.L2Normalize注意axis参数的指定

L2Normalize算子需要指定axis来决定需要处理的轴。

经验总结:

mindspore.ops.operations.L2Normalize#默认axis=0,
nn.functional.normalize(input, p=2, dim=1, eps=1e-12, out=None)#默认dim=1,

两者有很大差异;

迁移PyTorch网络使用L2Normalize算子时,请指定axis参数,示例如下:

norm = P.L2Normalize(axis=1)

在测试的时候使用mindspore.nn.Dropout

dropout算子只在训练中使用,测试的时候需要去掉。

经验总结:

PyTorch预测模式下Dropout自动不生效,而MindSpore预测模式下如果网络结构中有Dropout层,仍然会做drop。所以需要在测试的代码中手动去掉dropout,示例代码如下:

class Cut(nn.Cell):
def __init__(self):
super(Cut, self).__init__()
def construct(self, x):
return x
class CheckDrop(Cell):
def __init__(self, use_drop=1, keep_prob=0.6):
super(CheckDrop, self).__init__()
if use_drop == 1:
self.drop = nn.Dropout(keep_prob=keep_prob)
else:
self.drop = Cut()
def construct(self, x):
x = self.drop(x)
return x

点击关注,第一时间了解华为云新鲜技术~

送你5个MindSpore算子使用经验的更多相关文章

  1. MindSpore算子支持类

    MindSpore算子支持类 Q:在使用Conv2D进行卷积定义的时候使用到了group的参数,group的值不是只需要保证可以被输入输出的维度整除即可了吗?group参数的传递方式是怎样的呢? A: ...

  2. 技术干货 | 基于MindSpore更好的理解Focal Loss

    [本期推荐专题]物联网从业人员必读:华为云专家为你详细解读LiteOS各模块开发及其实现原理. 摘要:Focal Loss的两个性质算是核心,其实就是用一个合适的函数去度量难分类和易分类样本对总的损失 ...

  3. [技术干货-算子使用] Mindspore 控制流中存在原地更新操作类副作用算子时循环值不更新问题记录

    关于mindspore 原地更新类算子的一点思考记录如下: 现象记录: 原始测试代码 错误结果复现: 分析: 如果在场景中加入42行的copy()操作此时cpu的结果就会正确,但是gpu的结果则不受c ...

  4. [技术干货-算子使用] mindspore.scipy 入门使用指导

    1. MindSpore框架的SciPy模块 SciPy 是基于NumPy实现的科学计算库,主要用于数学.物理学.生物学等科学以及工程学领域.诸如高阶迭代,线性代数求解等都会需要用到SicPy.Sci ...

  5. 带你学习MindSpore中算子使用方法

    摘要:本文分享下MindSpore中算子的使用和遇到问题时的解决方法. 本文分享自华为云社区<[MindSpore易点通]算子使用问题与解决方法>,作者:chengxiaoli. 简介 算 ...

  6. tcpreplay安装使用经验

    tcpreplay安装使用经验   #Author: ypguo#Data: 2010.4.23#Version:  1.2 增加了修改VLAN tag内容.                 1.1 ...

  7. select_shape_proto算子的几种特征模式含义解析

    select_shape_proto是一个非常有用的region筛选算子,但是由于难以理解,因此一般人使用得不是太多. 算子签名如下: select_shape_proto(Regions, Patt ...

  8. Android第三方推送引擎比较

    所了解的第三方推送引擎有极光推送(JPush), 百度, 个推,腾讯信鸽等.根据了解,最专业的据说是极光推送,先看极光推送. 一.极光推送 https://www.jpush.cn/ 配置: 1.JP ...

  9. 13本热门书籍免费送!(Python、SpingBoot、Entity Framework、Ionic、MySQL、深度学习、小程序开发等)

    七月第一周,网易云社区联合清华大学出版社为大家送出13本数据分析以及移动开发的书籍(Python.SpingBoot.Entity Framework.Ionic.MySQL.深度学习.小程序开发等) ...

  10. Spark学习之路(四)—— RDD常用算子详解

    一.Transformation spark常用的Transformation算子如下表: Transformation算子 Meaning(含义) map(func) 对原RDD中每个元素运用 fu ...

随机推荐

  1. 怎么用Python写一个浏览器集群框架

    这是做什么用的 框架用途 在采集大量新闻网站时,不可避免的遇到动态加载的网站,这给配模版的人增加了很大难度.本来配静态网站只需要两个技能点:xpath和正则,如果是动态网站的还得抓包,遇到加密的还得j ...

  2. 机器学习实战5-KMeans聚类算法

    概述 聚类 VS 分类 有监督学习 VS 无监督学习 sklearn中的聚类算法 KMeans KMeans参数&接口 n_clusters n_clusters就是KMeans中的K就是告诉 ...

  3. ASP.NET CORE MVC的一些说明

    1.ASP.NET CORE MVC 是微软公司的Web应用开发框架,结合了MVC架构的高效.简洁等优秀思想并融合了.NET的灵活性. 2.ASP.NET诞生于2002年,当时微软想保持桌面应用程序的 ...

  4. kubernetes驱逐机制总结

    概述 k8s的驱逐机制是指在某些场景下,如node节点notReady.node节点压力较大等,将pod从某个node节点驱逐掉,让pod的上层控制器重新创建出新的pod来重新调度到其他node节点. ...

  5. IT运营与DevOps:有何不同?

    IT 运营和 DevOps 满足许多现代企业密切相关的需求.然而,尽管这两种角色之间有许多相似之处,但也有重要的区别,将 IT 运营与 DevOps 混为一谈是错误的. 本文通过解释每种类型的角色是做 ...

  6. 2023-11-08:用go语言,字符串哈希原理和实现 比如p = 233, 也就是课上说的选择的质数进制 “ 3 1 2 5 6 ...“ 0 1 2 3 4 hash[0] = 3 * p的0

    2023-11-08:用go语言,字符串哈希原理和实现 比如p = 233, 也就是课上说的选择的质数进制 " 3 1 2 5 6 ..." 0 1 2 3 4 hash[0] = ...

  7. Modbus转Profinet 网关 TS-180

    产品简介 实现 PROFINET 网络与串口网络之间的数据通信,三个串口可分别连接具有 RS232 或 RS485 接口的设 备到 PROFINET 网络.即将串口设备转换为 PROFINET 设备. ...

  8. BI软件是什么?应用BI工具能给企业带来什么

    BI软件是指利用数据挖掘.分析和可视化等技术,将企业内部和外部数据转化为有价值的信息和洞察,以帮助企业支持业务决策和优化业务流程的工具和应用程序.常见的BI软件包括Datainside.QlikVie ...

  9. Vue源码学习(十八):实现组件注册(一)Vue.component()和Vue.extend()

    好家伙, 0.完整代码已开源 https://github.com/Fattiger4399/analytic-vue.git 1.思路 1.1.什么是组件化? Vue 组件化是指将复杂的应用程序拆分 ...

  10. [计蒜客20191103C] 分组

    小 C 是 \(n\) 个学生的老师,他现在要把所有学生分成两组,他会按照以下这些要求: 1.如果两个同学是好朋友那么他们就不会被分到同一组 2.小 C 想最小化两组人数差值 现在请你写一个程序来帮助 ...