Pyotorch自定义损失函数
Posted GoAI
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Pyotorch自定义损失函数相关的知识,希望对你有一定的参考价值。
pytorch教程之nn.Module类详解——使用Module类来自定义模型
pytorch教程之nn.Module类详解——使用Module类来自定义网络层
1.损失函数知识总结参考:
PyTorch 笔记.常见的PyTorch损失函数 - 知乎
2.自定义损失函数学习参考:
- Loss Function Library - Keras & PyTorch | Kaggle
- Pytorch如何自定义损失函数(Loss Function)? - 知乎
- pytorch系列12 --pytorch自定义损失函数custom loss function_墨流觞的博客-
- 自定义损失函数 - image processing
- pytorch教程之损失函数详解——多种定义损失函数的方法
3.定义原始模版:
使用torch.Tensor提供的接口实现:
- 继承nn.Module类
- 在__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))
以上是关于Pyotorch自定义损失函数的主要内容,如果未能解决你的问题,请参考以下文章