形参与实参的不对应导致ops.GradOperation执行报错:The parameters number of the function is 2, but the number of provi

本文主要是介绍形参与实参的不对应导致ops.GradOperation执行报错:The parameters number of the function is 2, but the number of provi,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.系统环境

硬件环境(Ascend/GPU/CPU): GPU

软件环境:

– MindSpore 版本: 1.7.0

执行模式: 静态图(GRAPH) – Python 版本: 3.7.6

– 操作系统平台: linux

2.报错信息

2.1 问题描述

自定义训练网络中,进行反向传播计算梯度时,少给ops.GradOperation传入了一个参数导致执行报错。

2.2 报错信息

TypeError: mindspore/ccsrc/pipeline/jit/static_analysis/stack_frame.cc:101 DoJump] The parameters number of the function is 2, but the number of provided arguments is 1.

2.3 脚本代码

class TrainOneStepCell(nn.Cell):
def __init__(self, network, optimizer, sens=1.0): super(TrainOneStepCell, self).__init__(auto_prefix=False) self.network = network self.network.set_grad() self.optimizer = optimizer self.weights = self.optimizer.parameters self.grad = ops.GradOperation(get_by_list=True, sens_param=True) def construct(self,*inputs): """Defines the computation performed.""" loss = self.network(*inputs) grads = self.grad(self.network, self.weights)(*inputs) self.optimizer(grads) return grads,loss 复制

复制

3.根因分析

 看报错信息,翻译意思就是函数的形参数为2,但提供的实参数为1。

 查看官网文档关于自定义训练网络的设置,再进行反向传播,计算梯度时需要将loss传入。原因是因为反向传播需要根据loss值进行计算。

4.解决方案

解决方案说明:根据官网文档,将loss值传入self.grad。

修改后代码:

class TrainOneStepCell(nn.Cell):

def __init__(self, network, optimizer, sens=1.0):super(TrainOneStepCell, self).__init__(auto_prefix=False)self.network = networkself.network.set_grad()self.optimizer = optimizerself.weights = self.optimizer.parametersself.grad = ops.GradOperation(get_by_list=True, sens_param=True)def construct(self,*inputs):"""Defines the computation performed."""loss = self.network(*inputs)grads = self.grad(self.network, self.weights)(*inputs,loss)self.optimizer(grads)return grads,loss

修改后,程序正常训练。

这篇关于形参与实参的不对应导致ops.GradOperation执行报错:The parameters number of the function is 2, but the number of provi的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/337649

相关文章

javacv依赖太大导致jar包也大的解决办法

《javacv依赖太大导致jar包也大的解决办法》随着项目的复杂度和依赖关系的增加,打包后的JAR包可能会变得很大,:本文主要介绍javacv依赖太大导致jar包也大的解决办法,文中通过代码介绍的... 目录前言1.检查依赖2.更改依赖3.检查副依赖总结 前言最近在写项目时,用到了Javacv里的获取视频

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

Java实现远程执行Shell指令

《Java实现远程执行Shell指令》文章介绍使用JSch在SpringBoot项目中实现远程Shell操作,涵盖环境配置、依赖引入及工具类编写,详解分号和双与号执行多指令的区别... 目录软硬件环境说明编写执行Shell指令的工具类总结jsch(Java Secure Channel)是SSH2的一个纯J

解决升级JDK报错:module java.base does not“opens java.lang.reflect“to unnamed module问题

《解决升级JDK报错:modulejava.basedoesnot“opensjava.lang.reflect“tounnamedmodule问题》SpringBoot启动错误源于Jav... 目录问题描述原因分析解决方案总结问题描述启动sprintboot时报以下错误原因分析编程异js常是由Ja

python 线程池顺序执行的方法实现

《python线程池顺序执行的方法实现》在Python中,线程池默认是并发执行任务的,但若需要实现任务的顺序执行,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋... 目录方案一:强制单线程(伪顺序执行)方案二:按提交顺序获取结果方案三:任务间依赖控制方案四:队列顺序消

解决Nginx启动报错Job for nginx.service failed because the control process exited with error code问题

《解决Nginx启动报错Jobfornginx.servicefailedbecausethecontrolprocessexitedwitherrorcode问题》Nginx启... 目录一、报错如下二、解决原因三、解决方式总结一、报错如下Job for nginx.service failed bec

SysMain服务可以关吗? 解决SysMain服务导致的高CPU使用率问题

《SysMain服务可以关吗?解决SysMain服务导致的高CPU使用率问题》SysMain服务是超级预读取,该服务会记录您打开应用程序的模式,并预先将它们加载到内存中以节省时间,但它可能占用大量... 在使用电脑的过程中,CPU使用率居高不下是许多用户都遇到过的问题,其中名为SysMain的服务往往是罪魁

Go语言连接MySQL数据库执行基本的增删改查

《Go语言连接MySQL数据库执行基本的增删改查》在后端开发中,MySQL是最常用的关系型数据库之一,本文主要为大家详细介绍了如何使用Go连接MySQL数据库并执行基本的增删改查吧... 目录Go语言连接mysql数据库准备工作安装 MySQL 驱动代码实现运行结果注意事项Go语言执行基本的增删改查准备工作

Java报错:org.springframework.beans.factory.BeanCreationException的五种解决方法

《Java报错:org.springframework.beans.factory.BeanCreationException的五种解决方法》本文解析Spring框架中BeanCreationExce... 目录引言一、问题描述1.1 报错示例假设我们有一个简单的Java类,代表一个用户信息的实体类:然后,

解决若依微服务框架启动报错的问题

《解决若依微服务框架启动报错的问题》Invalidboundstatement错误通常由MyBatis映射文件未正确加载或Nacos配置未读取导致,需检查XML的namespace与方法ID是否匹配,... 目录ruoyi-system模块报错报错详情nacos文件目录总结ruoyi-systnGLNYpe