问题描述:
我现在自己写了个NetWithLossCell类,封装好了loss的计算。这里面有两个loss需要在前向传播之后输出,用于打印显示信息。
但只有一个loss是需要用于梯度计算的,这应该在TrainOneStepCell里怎么修改啊?
解答:
可以参考这篇文档: https://mindspore.cn/docs/programming_guide/zh-CN/r1.6/grad_operation.html?highlight=stop_gradient
在Loss定义中,不需要求导的loss:loss = stop_gradient(loss)
你好,stop_gradient的用法和前向网络有几个输出并没有关系,它是用来停止梯度传播的,虽然例子中只有一个输出,但是你这里两个输出仍然适用。正向网络中可以这么改: ``` ... psnr = mse2psnr(loss_coarse) psnr = stop_gradient(psnr) return loss, psnr ```