Pytorch中有哪些损失函数?

Pytorch中有哪些损失函数?

  • 一、常见的损失
    • [1. **均方误差损失(Mean Squared Error Loss):`nn.MSELoss`**](#1. 均方误差损失(Mean Squared Error Loss):nn.MSELoss)
    • [2. **交叉熵损失(Cross-Entropy Loss):`nn.CrossEntropyLoss`**](#2. 交叉熵损失(Cross-Entropy Loss):nn.CrossEntropyLoss)
    • [3. **二分类交叉熵损失(Binary Cross-Entropy Loss):`nn.BCELoss`**](#3. 二分类交叉熵损失(Binary Cross-Entropy Loss):nn.BCELoss)
    • [4. **Kullback-Leibler 散度损失(Kullback-Leibler Divergence Loss):`nn.KLDivLoss`**](#4. Kullback-Leibler 散度损失(Kullback-Leibler Divergence Loss):nn.KLDivLoss)
    • [5. **交叉熵损失(多标签):`nn.MultiLabelSoftMarginLoss`**](#5. 交叉熵损失(多标签):nn.MultiLabelSoftMarginLoss)
    • [6. **负对数似然损失(Negative Log Likelihood Loss):`nn.NLLLoss`**](#6. 负对数似然损失(Negative Log Likelihood Loss):nn.NLLLoss)
    • [7. **Hinge Embedding Loss:`nn.HingeEmbeddingLoss`**](#7. Hinge Embedding Loss:nn.HingeEmbeddingLoss)
  • 二、案例
    • [1. 交叉熵损失函数(CrossEntropyLoss)](#1. 交叉熵损失函数(CrossEntropyLoss))
    • [2. 均方误差损失函数(MSELoss)](#2. 均方误差损失函数(MSELoss))
    • [3. 平滑的L1损失函数(SmoothL1Loss)](#3. 平滑的L1损失函数(SmoothL1Loss))
    • [4. 二分类交叉熵损失函数(BCELoss)](#4. 二分类交叉熵损失函数(BCELoss))
    • [5. 像素级别交叉熵损失函数(CrossEntropyLoss2d)](#5. 像素级别交叉熵损失函数(CrossEntropyLoss2d))

一、常见的损失

PyTorch提供了丰富的损失函数,用于各种不同的任务,如分类、回归、生成对抗网络(GANs)等。以下是一些常用的损失函数,并给出了它们的调用方法:

1. 均方误差损失(Mean Squared Error Loss):nn.MSELoss

  • 用于回归任务。

    python 复制代码
    import torch
    import torch.nn as nn
    
    criterion = nn.MSELoss()

2. 交叉熵损失(Cross-Entropy Loss):nn.CrossEntropyLoss

  • 用于分类任务,特别是多类别分类。

    python 复制代码
    import torch
    import torch.nn as nn
    
    criterion = nn.CrossEntropyLoss()

3. 二分类交叉熵损失(Binary Cross-Entropy Loss):nn.BCELoss

  • 用于二分类任务。

    python 复制代码
    import torch
    import torch.nn as nn
    
    criterion = nn.BCELoss()

4. Kullback-Leibler 散度损失(Kullback-Leibler Divergence Loss):nn.KLDivLoss

  • 用于衡量两个概率分布之间的相似性。

    python 复制代码
    import torch
    import torch.nn as nn
    
    criterion = nn.KLDivLoss()

5. 交叉熵损失(多标签):nn.MultiLabelSoftMarginLoss

  • 用于多标签分类任务。

    python 复制代码
    import torch
    import torch.nn as nn
    
    criterion = nn.MultiLabelSoftMarginLoss()

6. 负对数似然损失(Negative Log Likelihood Loss):nn.NLLLoss

  • 通常与 nn.LogSoftmax 结合使用,用于多类别分类。

    python 复制代码
    import torch
    import torch.nn as nn
    
    criterion = nn.NLLLoss()

7. Hinge Embedding Loss:nn.HingeEmbeddingLoss

  • 用于支持向量机(SVM)训练。

    python 复制代码
    import torch
    import torch.nn as nn
    
    criterion = nn.HingeEmbeddingLoss()

以上只是一些损失函数的示例,PyTorch还提供了许多其他损失函数,可以根据任务的不同选择适当的损失函数。在使用损失函数时,通常将其实例化为一个对象,然后在训练循环中使用模型的输出和目标值计算损失。

二、案例

PyTorch中提供了多种损失函数,涵盖了分类、回归和图像处理等不同领域的任务,以下是其中一些常用的损失函数及其使用示例:

1. 交叉熵损失函数(CrossEntropyLoss)

适用于多分类任务,通常与Softmax层结合使用。

python 复制代码
import torch.nn as nn
import torch.optim as optim
# 定义神经网络模型
class Net(nn.Module):
    def __init__(self, num_classes):
        super(Net, self).__init__()
        self.fc1 = nn.Linear(10, 5)
        self.fc2 = nn.Linear(5, num_classes)
    def forward(self, x):
        x = nn.functional.relu(self.fc1(x))
        x = self.fc2(x)
        return x
# 创建模型实例、损失函数和优化器
net = Net(num_classes=3) # 假设有3个类别
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(net.parameters(), lr=0.01)
# 在每次迭代中,计算并反向传播损失
output = net(input_data)
loss = criterion(output, target)
loss.backward()
optimizer.step()

2. 均方误差损失函数(MSELoss)

适用于回归任务,用于度量模型输出和目标值之间的平均平方误差。

python 复制代码
import torch.nn as nn
import torch.optim as optim
# 定义神经网络模型
class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.fc1 = nn.Linear(10, 5)
        self.fc2 = nn.Linear(5, 1)
    def forward(self, x):
        x = nn.functional.relu(self.fc1(x))
        x = self.fc2(x)
        return x
# 创建模型实例、损失函数和优化器
net = Net()
criterion = nn.MSELoss()
optimizer = optim.SGD(net.parameters(), lr=0.01)
# 在每次迭代中,计算并反向传播损失
output = net(input_data)
loss = criterion(output, target)
loss.backward()
optimizer.step()

3. 平滑的L1损失函数(SmoothL1Loss)

适用于回归任务,与MSELoss不同,SmoothL1Loss对异常值更加鲁棒。

python 复制代码
import torch.nn as nn
import torch.optim as optim
# 定义神经网络模型
class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.fc1 = nn.Linear(10, 5)
        self.fc2 = nn.Linear(5, 1)
    def forward(self, x):
        x = nn.functional.relu(self.fc1(x))
        x = self.fc2(x)
        return x
# 创建模型实例、损失函数和优化器
net = Net()
criterion = nn.SmoothL1Loss()
optimizer = optim.SGD(net.parameters(), lr=0.01)
# 在每次迭代中,计算并反向传播损失
output = net(input_data)
loss = criterion(output, target)
loss.backward()
optimizer.step()

4. 二分类交叉熵损失函数(BCELoss)

适用于二分类任务,将模型输出视为一个概率值,用于度量模型输出和目标值之间的交叉熵。

python 复制代码
import torch.nn as nn
import torch.optim as optim
# 定义神经网络模型
class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.fc1 = nn.Linear(10, 5)
        self.fc2 = nn.Linear(5, 1)
    def forward(self, x):
        x = nn.functional.relu(self.fc1(x))
        x = nn.functional.sigmoid(self.fc2(x))
        return x
# 创建模型实例、损失函数和优化器
net = Net()
criterion = nn.BCELoss()
optimizer = optim.SGD(net.parameters(), lr=0.01)
# 在每次迭代中,计算并反向传播损失
output = net(input_data)
loss= criterion(output, target) loss.backward() optimizer.step()
python 复制代码
= criterion(output, target) loss.backward() optimizer.step()
python 复制代码
import torch.nn as nn import torch.optim as optim
# 定义神经网络模型
class Net(nn.Module): def init(self): super(Net, self).init() self.fc1 = nn.Linear(10, 5) self.fc2 = nn.Linear(5, 1)
python 复制代码
def forward(self, x):
    x = nn.functional.relu(self.fc1(x))
    x = self.fc2(x)
    return x

# 创建模型实例、损失函数和优化器
net = Net() criterion = nn.BCEWithLogitsLoss(pos_weight=torch.tensor([5.0])) optimizer = optim.SGD(net.parameters(), lr=0.01)
# 在每次迭代中,计算并反向传播损失
output = net(input_data) loss = criterion(output, target) loss.backward() optimizer.step()

这里设置了一个正样本的权重为5,表示模型在训练时应该更加关注正样本。

5. 像素级别交叉熵损失函数(CrossEntropyLoss2d)

适用于图像分割任务,将每个像素点的预测结果视为一个概率值,用于度量模型输出和目标值之间的交叉熵。

python 复制代码
import torch.nn as nn
import torch.optim as optim
# 定义神经网络模型
class Net(nn.Module):
    def __init__(self, num_classes):
        super(Net, self).__init__()
        self.conv1 = nn.Conv2d(3, 64, kernel_size=3, stride=1, padding=1)
        self.conv2 = nn.Conv2d(64, 128, kernel_size=3, stride=1, padding=1)
        self.conv3 = nn.Conv2d(128, num_classes, kernel_size=3, stride=1, padding=1)
    def forward(self, x):
        x = nn.functional.relu(self.conv1(x))
        x = nn.functional.max_pool2d(x, kernel_size=2, stride=2)
        x = nn.functional.relu(self.conv2(x))
        x = nn.functional.max_pool2d(x, kernel_size=2, stride=2)
        x = self.conv3(x)
        return x
# 创建模型实例、损失函数和优化器
net = Net(num_classes=2) # 假设有2个类别
criterion = nn.CrossEntropyLoss2d()
optimizer = optim.SGD(net.parameters(), lr=0.01)
# 在每次迭代中,计算并反向传播损失
output = net(input_data)
loss = criterion(output, target)
loss.backward()
optimizer.step()

这里使用了一个简单的卷积神经网络来进行二分类图像分割,输出层使用了两个通道,分别代表两种类别(前景和背景)。损失函数为CrossEntropyLoss2d,用于计算每个像素点的预测结果与真实标签之间的交叉熵损失。

除了以上列出的常见损失函数外,PyTorch还提供了许多其他类型的损失函数,如L1Loss、NLLLoss、KLDivLoss等,可以根据具体应用场景选择适合的损失函数。

相关推荐
数智大号1 分钟前
浪潮云边协同:赋能云计算变革的强力引擎
人工智能
胡玉洋38 分钟前
从新手到高手:全面解析 AI 时代的「魔法咒语」——Prompt
人工智能·ai·prompt·transformer·协议
是店小二呀38 分钟前
Trae 插件 Builder 模式:从 0 到 1 开发天气查询小程序,解锁 AI 编程新体验
人工智能·ai编程·trae
kyle~1 小时前
深度学习框架---TensorFlow概览
人工智能·深度学习·tensorflow
CodeJourney.1 小时前
ChemBlender:科研绘图创新解决方案
数据库·人工智能·信息可视化·excel
南部余额1 小时前
Python 类变量与实例变量完全指南:区别、使用场景及常见陷阱
开发语言·python
电鱼智能的电小鱼1 小时前
产线视觉检测设备技术方案:基于EFISH-SCB-RK3588/SAIL-RK3588的国产化替代赛扬N100/N150全场景技术解析
linux·人工智能·嵌入式硬件·计算机视觉·视觉检测·实时音视频
妄想成为master1 小时前
计算机视觉----基于锚点的车道线检测、从Line-CNN到CLRNet到CLRKDNet 本文所提算法Line-CNN 后续会更新以下全部算法
人工智能·计算机视觉·车道线检测
yunvwugua__1 小时前
Python训练营打卡 Day26
前端·javascript·python
满怀10152 小时前
【Django全栈开发实战】从零构建企业级Web应用
前端·python·django·orm·web开发·前后端分离