MindSpore动态图模式下梯度计算报错AttributeError: module 'mindspore' has no attribute 'value_and_grad'

1 系统环境

  • 硬件环境(Ascend/GPU/CPU): Ascend910
  • MindSpore版本: mindspore=2.0.0
  • 执行模式(PyNative/ Graph): PyNative
  • Python版本: Python=3.8
  • 操作系统平台: Linux

2 报错信息

2.1 问题描述

在使用MindSpore的PyNative模式进行模型训练时,尝试通过mindspore.value_and_grad接口获取梯度计算函数,但程序抛出了AttributeError异常。具体场景为在自定义损失函数中计算梯度以便进行参数优化。一个简单的全连接神经网络,并在前向计算后使用value_and_grad方法获取梯度。相关代码段如下:

2.2 脚本信息

import mindspore
from mindspore import nn, Tensor
import numpy as np
class SimpleNet(nn.Cell):
    def __init__(self):
        super(SimpleNet, self).__init__()
        self.fc = nn.Dense(10, 1)
    
    def construct(self, x):
        return self.fc(x)
net = SimpleNet()
optimizer = nn.SGD(net.trainable_params(), learning_rate=0.01)
def forward_fn(x, y):
    output = net(x)
    loss = nn.MSELoss()(output, y)
    return loss
# 获取梯度函数时出现报错
grad_fn = mindspore.value_and_grad(forward_fn, None, optimizer.parameters, has_aux=True)

2.3 报错信息

AttributeError: module ‘mindspore’ has no attribute ‘value_and_grad’

3 根因分析

  • 此处由用户填写

4 解决方案

  • 此处由用户填写
  • 包含文字方案和最终脚本代码 请将正确的脚本打包并上传附件

参与帖子:MindSpore梯度计算报错AttributeError: module ‘mindspore’ has no attribute ‘value_and_grad’分析及解决