形参与实参的不对应导致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

相关文章

解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题

《解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题》文章详细描述了在使用lombok的@Data注解标注实体类时遇到编译无误但运行时报错的问题,分析... 目录问题分析问题解决方案步骤一步骤二步骤三总结问题使用lombok注解@Data标注实体类,编译时

详解如何在React中执行条件渲染

《详解如何在React中执行条件渲染》在现代Web开发中,React作为一种流行的JavaScript库,为开发者提供了一种高效构建用户界面的方式,条件渲染是React中的一个关键概念,本文将深入探讨... 目录引言什么是条件渲染?基础示例使用逻辑与运算符(&&)使用条件语句列表中的条件渲染总结引言在现代

linux报错INFO:task xxxxxx:634 blocked for more than 120 seconds.三种解决方式

《linux报错INFO:taskxxxxxx:634blockedformorethan120seconds.三种解决方式》文章描述了一个Linux最小系统运行时出现的“hung_ta... 目录1.问题描述2.解决办法2.1 缩小文件系统缓存大小2.2 修改系统IO调度策略2.3 取消120秒时间限制3

MybatisGenerator文件生成不出对应文件的问题

《MybatisGenerator文件生成不出对应文件的问题》本文介绍了使用MybatisGenerator生成文件时遇到的问题及解决方法,主要步骤包括检查目标表是否存在、是否能连接到数据库、配置生成... 目录MyBATisGenerator 文件生成不出对应文件先在项目结构里引入“targetProje

解决systemctl reload nginx重启Nginx服务报错:Job for nginx.service invalid问题

《解决systemctlreloadnginx重启Nginx服务报错:Jobfornginx.serviceinvalid问题》文章描述了通过`systemctlstatusnginx.se... 目录systemctl reload nginx重启Nginx服务报错:Job for nginx.javas

VMWare报错“指定的文件不是虚拟磁盘“或“The file specified is not a virtual disk”问题

《VMWare报错“指定的文件不是虚拟磁盘“或“Thefilespecifiedisnotavirtualdisk”问题》文章描述了如何修复VMware虚拟机中出现的“指定的文件不是虚拟... 目录VMWare报错“指定的文件不是虚拟磁盘“或“The file specified is not a virt

如何使用 Bash 脚本中的time命令来统计命令执行时间(中英双语)

《如何使用Bash脚本中的time命令来统计命令执行时间(中英双语)》本文介绍了如何在Bash脚本中使用`time`命令来测量命令执行时间,包括`real`、`user`和`sys`三个时间指标,... 使用 Bash 脚本中的 time 命令来统计命令执行时间在日常的开发和运维过程中,性能监控和优化是不

C#如何优雅地取消进程的执行之Cancellation详解

《C#如何优雅地取消进程的执行之Cancellation详解》本文介绍了.NET框架中的取消协作模型,包括CancellationToken的使用、取消请求的发送和接收、以及如何处理取消事件... 目录概述与取消线程相关的类型代码举例操作取消vs对象取消监听并响应取消请求轮询监听通过回调注册进行监听使用Wa

使用Vue.js报错:ReferenceError: “Vue is not defined“ 的原因与解决方案

《使用Vue.js报错:ReferenceError:“Vueisnotdefined“的原因与解决方案》在前端开发中,ReferenceError:Vueisnotdefined是一个常见... 目录一、错误描述二、错误成因分析三、解决方案1. 检查 vue.js 的引入方式2. 验证 npm 安装3.

PHP执行php.exe -v命令报错的解决方案

《PHP执行php.exe-v命令报错的解决方案》:本文主要介绍PHP执行php.exe-v命令报错的解决方案,文中通过图文讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下... 目录执行phpandroid.exe -v命令报错解决方案执行php.exe -v命令报错-PHP War