MindSpore报错:construct() missing 1 required positional argument

举报
孙小北 发表于 2022/10/30 16:15:15 2022/10/30
【摘要】 1 系统环境Windows11 x64 CPUPython 3.9MindSpore 1.8.1conda env listconda activate py39_ms18# 更新环境pip install --upgrade pippip install https://ms-release.obs.cn-north-4.myhuaweicloud.com/1.8.0/MindSpor...

1 系统环境

  • Windows11 x64 CPU
  • Python 3.9
  • MindSpore 1.8.1
conda env list

conda activate py39_ms18
# 更新环境
pip install --upgrade pip

pip install https://ms-release.obs.cn-north-4.myhuaweicloud.com/1.8.0/MindSpore/cpu/x86_64/mindspore-1.8.0-cp39-cp39-win_amd64.whl --trusted-host ms-release.obs.cn-north-4.myhuaweicloud.com -i https://pypi.tuna.tsinghua.edu.cn/simple

2 报错信息

2.1 问题描述

  • 代码给的不全,好像少了很多,还存在中英文符号问题,尝试补全
  • 参数缺少,需要两个参数,只给一个
  • 单词拼写错误太多

2.2 问题描述

  • TypeError: construct() missing 1 required positional argument:‘labet’
  • TypeError: init() missing 2 required positional arguments: ‘network’ and ‘optimizer’

2.3 脚本代码

def __init__(self, optimizer):

”””入参有两个:训练网络,优化器”””

super(CustomTrain0neStepCell, self).__init__(auto_prefix=False)

seLf.network = network        # 定义前向网络

self.network.set_grad()         # 构建反向网络

self.optimizer = optimizer            # 定义优化器

self.weights = self.optimizer .parameters      #待更新参数

self.grad = ops.Grad0peration(get_by_list=True,sens_param=True)

3 根因分析

  • 代码中存在多处拼写错误: 0 和O ,大小写
  • 参数给定的和需要的不一致,缺少参数

4 解决方案

  • (1)修改并尝试补全代码
  • (2)修正多处 0 和 O问题
  • (3)修正单词拼写问题
  • (4)修改增加参数
import numpy as np
import mindspore.nn as nn
import mindspore.ops as ops
import mindspore as ms

class CustomTrainOneStepCell(nn.Cell):
    def __init__(self, network, optimizer):
        """入参有两个:训练网络,优化器"""
        super(CustomTrainOneStepCell, self).__init__(auto_prefix=False)  # CustomTrain0neStepCell
        self.network = network        # 定义前向网络  seLf.network = network
        self.network.set_grad()         # 构建反向网络
        self.optimizer = optimizer            # 定义优化器
        self.weights = self.optimizer.parameters      #待更新参数 self.weights = self.optimizer .parameters
        self.grad = ops.GradOperation(get_by_list=True, sens_param=True) #  Grad0peration

    def construct(self, x, label):
        return x

if __name__:
    # ms.set_context(mode=mindspore.GRAPH_MODE, device_target="CPU")
    ms.set_context(mode=ms.GRAPH_MODE, device_target="CPU")
    # input = ms.Tensor(np.array([1.0, 2.0, 3.0]).astype(np.float32))
    label= []
    input = ms.Tensor(np.ones([1, 120, 640]), ms.float32)
    network =nn.Conv1d(120, 240, 4, has_bias=False, weight_init='normal')
    optimizer = nn.SGD(network.trainable_params(), 1e-2)

    net = CustomTrainOneStepCell(network, optimizer)
    net(input, label)
  • 这里使用的是最基本的优化器是随机梯度下降算法(SGD),很多优化器在SGD的基础上进行了改进,以实现目标函数能更快速更有效地收敛到全局最优点。MindSpore中的nn模块提供了常用的优化器,如nn.SGD、nn.Adam、nn.Momentum等。
optimizer = nn.SGD(network.trainable_params(), 1e-2)
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。