华为计算微信公众号
昇腾AI开发者公众号
华为计算微博
华为计算今日头条
我正在将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()这一句,应当如何取用呢?
我要发帖子
我正在将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()这一句,应当如何取用呢?