Pytorch转MIndSpore,关于loss.backward()求助
收藏回复举报
Pytorch转MIndSpore,关于loss.backward()求助
t('forum.solved') 已解决
发表于2024-01-25 21:30:30
0 查看

我正在将Pytorch的代码转换成MIndSpore框架,在pytorch中有这样的一行:

loss.backward()

请问应当如何用mindspore等价地替换backward()这个方法呢?

我目前查阅官方文档给出的是mindspore.ops.GradOperation方法,包含以下的代码:

# In MindSpore:
class Net(nn.Cell):
    def __init__(self):
        super(Net, self).__init__()
        self.matmul = ops.MatMul()
        self.z = Parameter(Tensor(np.array([1.0], np.float32)), name='z')
    def construct(self, x, y):
        x = x * self.z
        out = self.matmul(x, y)
        return out

class GradNetWrtX(nn.Cell):
    def __init__(self, net):
        super(GradNetWrtX, self).__init__()
        self.net = net
        self.grad_op = ops.GradOperation()
    def construct(self, x, y):
        gradient_function = self.grad_op(self.net)
        return gradient_function(x, y)

x = Tensor([[0.5, 0.6, 0.4], [1.2, 1.3, 1.1]], dtype=mstype.float32)
y = Tensor([[0.01, 0.3, 1.1], [0.1, 0.2, 1.3], [2.1, 1.2, 3.3]], dtype=mstype.float32)
output = GradNetWrtX(Net())(x, y)

如果只是为了转换loss.backward()这一句,应当如何取用呢?

我要发帖子