Pyotorch自定义损失函数

pytorch教程之nn.Module类详解——使用Module类来自定义模型

pytorch教程之nn.Module类详解——使用Module类来自定义网络层

1.损失函数知识总结参考:

深度学习笔记总结_GoAI的博客-CSDN博客

PyTorch 笔记.常见的PyTorch损失函数 – 知乎

2.自定义损失函数学习参考:

  1. Loss Function Library – Keras & PyTorch | Kaggle
  2. Pytorch如何自定义损失函数(Loss Function)? – 知乎
  3. pytorch系列12 –pytorch自定义损失函数custom loss function_墨流觞的博客-
  4. 自定义损失函数 – image processing
  5. pytorch教程之损失函数详解——多种定义损失函数的方法

3.定义原始模版:

使用torch.Tensor提供的接口实现:

  1. 继承nn.Module类
  2. 在__init__函数中定义所需要的超参数,在foward函数中定义loss的计算方法。
  • 所有的数学操作使用tensor提供的math operation
  • 返回的tensor是0-dim的scalar
  • 有可能会用到nn.functional中的一些操作
  • Pytorch如何自定义损失函数(Loss Function)? – 知乎

例子:

    1 	class myLoss(nn.Module):
    2 	    def __init__(self,parameters)
    3 	        self.params = self.parameters
    4 	
    5 	    def forward(self)
    6 	        loss = cal_loss(self.params)
    7 	        return loss
<

采用:

    1 	criterion=myLoss()
    2 	loss=criterion(……)<

4.自定义函数方法

方法一:新建类

方案1:只定义loss函数的前向计算公式

在pytorch中定义了前向计算的公式,在训练时它会自动帮你计算反向传播。

class My_loss(nn.Module):

def __init__(self):

super().__init__()

def forward(self, x, y):

return torch.mean(torch.pow((x – y), 2))

采用:

criterion = My_loss()

loss = criterion(outputs, targets)

方案2:自定义loss函数的forward和backward

from numpy.fft import rfft2, irfft2

class BadFFTFunction(Function):

def forward(self, input):

numpy_input = input.numpy()

result = abs(rfft2(numpy_input))

return input.new(result)

def backward(self, grad_output):

numpy_go = grad_output.numpy()

result = irfft2(numpy_go)

return grad_output.new(result)

方法二:自定义函数

看一自定义类中,其实最终调用还是forward实现,同时nn.Module还要维护一些其他变量和状态。不如直接自定义loss函数实现:

# 直接定义函数,无需维护参数、梯度等信息

# 注意所有的数学操作需要使用tensor完成。

def my_mse_loss(x, y):

return torch.mean(torch.pow((x – y), 2))

版权声明:本文为博主GoAI原创文章,版权归属原作者,如果侵权,请联系我们删除!

原文链接:https://blog.csdn.net/qq_36816848/article/details/123191715

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
社会演员多的头像社会演员多普通用户
上一篇 2022年3月6日 下午8:43
下一篇 2022年3月6日

相关推荐