pytorch教程之nn.Module类详解——使用Module类来自定义模型
pytorch教程之nn.Module类详解——使用Module类来自定义网络层
1.损失函数知识总结参考:
深度学习笔记总结_GoAI的博客-CSDN博客
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))
版权声明:本文为博主GoAI原创文章,版权归属原作者,如果侵权,请联系我们删除!
原文链接:https://blog.csdn.net/qq_36816848/article/details/123191715