当前位置: 首页 > wzjs >正文

自己做的网站竞价优化武汉seo建站

自己做的网站竞价优化,武汉seo建站,衡阳网站设计公司,wordpress子主题怎么用损失函数(Loss Function)是深度学习中至关重要的组成部分,它衡量模型预测结果与真实标签之间的差异,是模型优化的目标。本文将详细介绍线性回归损失函数(MAE、MSE)、CrossEntropyLoss和BCELoss的原理、特点…

损失函数(Loss Function)是深度学习中至关重要的组成部分,它衡量模型预测结果与真实标签之间的差异,是模型优化的目标。本文将详细介绍线性回归损失函数(MAE、MSE)、CrossEntropyLoss和BCELoss的原理、特点及PyTorch实现。

1. 线性回归损失函数

线性回归问题通常使用MAE(平均绝对误差)和MSE(均方误差)作为损失函数。

1.1 MAE损失(L1 Loss)

MAE(Mean Absolute Error)计算预测值与真实值之间绝对差值的平均值。

公式

 

 

特点

  • 对异常值不敏感

  • 梯度恒定,不利于梯度下降优化

PyTorch实现

import torch
import torch.nn as nn# 创建MAE损失函数实例
mae_loss = nn.L1Loss()# 示例数据
predictions = torch.tensor([1.5, 2.0, 3.2], dtype=torch.float32)
targets = torch.tensor([1.0, 2.5, 2.8], dtype=torch.float32)# 计算损失
loss = mae_loss(predictions, targets)
print(f"MAE Loss: {loss.item():.4f}")  # 输出: MAE Loss: 0.4667

1.2 MSE损失(L2 Loss)

MSE(Mean Squared Error)计算预测值与真实值之间平方差值的平均值。

公式

 

 

特点

  • 对异常值敏感

  • 梯度随误差增大而增大,有利于梯度下降

PyTorch实现

# 创建MSE损失函数实例
mse_loss = nn.MSELoss()# 使用之前的示例数据
loss = mse_loss(predictions, targets)
print(f"MSE Loss: {loss.item():.4f}")  # 输出: MSE Loss: 0.2967# 带reduction参数的MSE
mse_loss_sum = nn.MSELoss(reduction='sum')  # 求和而非平均
loss_sum = mse_loss_sum(predictions, targets)
print(f"MSE Sum Loss: {loss_sum.item():.4f}")  # 输出: MSE Sum Loss: 0.8900

参数说明

  • reduction:指定缩减方式,可选:

    • 'mean'(默认):返回损失的平均值

    • 'sum':返回损失的总和

    • 'none':返回每个样本的损失

2. CrossEntropyLoss(交叉熵损失)

交叉熵损失是分类任务中最常用的损失函数,尤其适用于多分类问题。

2.1 信息理论基础

2.1.1 信息量

对于一个事件x,其发生的概率为 P(x),信息量I(x)   

信息量是衡量一个事件发生的"惊讶程度",定义:

 

2.1.2 信息熵

信息熵是信息量的期望,衡量系统的不确定性:

 

2.1.3 KL散度

KL散度衡量两个概率分布的差异:

 

2.1.4 交叉熵

交叉熵是信息熵与KL散度的组合:

 

在分类任务中,P是真实分布(one-hot),Q是预测分布,因此最小化交叉熵等价于最小化KL散度。

2.2 PyTorch实现

# 创建交叉熵损失函数实例
ce_loss = nn.CrossEntropyLoss()# 示例数据
# 3个样本,5分类问题(注意输入不需要softmax,内部会自动处理)
logits = torch.tensor([[1.2, 0.4, -0.5, 2.1, 0.3],[0.8, 1.9, -1.2, 0.4, 1.1],[-0.1, 2.4, 0.7, 1.5, -0.5]], dtype=torch.float32)# 每个样本的真实类别索引(0-4)
targets = torch.tensor([3, 1, 4], dtype=torch.long)# 计算损失
loss = ce_loss(logits, targets)
print(f"CrossEntropy Loss: {loss.item():.4f}")  # 输出示例: CrossEntropy Loss: 0.8765

参数说明

  • weight(Tensor, 可选):给每个类别分配权重,用于处理类别不平衡问题

  • ignore_index(int, 可选):指定一个被忽略的类别索引,其不会贡献损失

  • reduction(str, 可选):与MSE相同,指定缩减方式

  • label_smoothing(float, 可选):标签平滑系数,0.0表示不使用

带权重的示例

# 假设5个类别的权重分别为[0.1, 0.2, 0.3, 0.2, 0.2]
weights = torch.tensor([0.1, 0.2, 0.3, 0.2, 0.2], dtype=torch.float32)ce_loss_weighted = nn.CrossEntropyLoss(weight=weights)
loss_weighted = ce_loss_weighted(logits, targets)
print(f"Weighted CrossEntropy Loss: {loss_weighted.item():.4f}")

3. BCELoss(二元交叉熵损失)

BCELoss(Binary Cross Entropy Loss)用于二分类问题,每个样本只能属于正类或负类。

公式

 

参数说明

  1. n

    • 表示当前批次中的样本数量

    • 用于计算所有样本损失的平均值

    • 在PyTorch中可以通过reduction='mean'(默认)或reduction='sum'来改变这个行为

  2. i

    • 样本索引,从1到n

    • 表示对批次中每个样本的计算

  3. yᵢ

    • 第i个样本的真实标签(ground truth)

    • 取值为0或1(负类或正类)

    • 在PyTorch中通常是一个浮点型Tensor,形状为[batch_size][batch_size, 1]

  4. ŷᵢ(y hat):

    • 模型对第i个样本的预测概率

    • 取值范围应该在(0,1)之间,通常通过sigmoid函数得到

    • 形状与yᵢ相同

  5. log

    • 自然对数(以e为底)

    • 在PyTorch实现中会处理数值稳定性问题(如添加微小值防止log(0))

 

PyTorch实现: 

# 创建BCE损失函数实例
bce_loss = nn.BCELoss()# 示例数据
# 4个样本的预测概率(经过sigmoid激活)
predictions = torch.tensor([0.8, 0.2, 0.6, 0.9], dtype=torch.float32)
# 真实标签(0或1)
targets = torch.tensor([1.0, 0.0, 1.0, 1.0], dtype=torch.float32)# 计算损失
loss = bce_loss(predictions, targets)
print(f"BCE Loss: {loss.item():.4f}")  # 输出示例: BCE Loss: 0.2070# 带权重的BCE
bce_loss_weighted = nn.BCELoss(weight=torch.tensor([1.0, 2.0, 1.0, 1.0]))
loss_weighted = bce_loss_weighted(predictions, targets)
print(f"Weighted BCE Loss: {loss_weighted.item():.4f}")

BCEWithLogitsLoss

通常在实际使用中,我们更常用BCEWithLogitsLoss,它结合了Sigmoid激活和BCELoss,数值计算更稳定。

bce_logits_loss = nn.BCEWithLogitsLoss()# 输入是未经过sigmoid的原始logits
logits = torch.tensor([1.5, -1.2, 0.4, 2.1], dtype=torch.float32)
targets = torch.tensor([1.0, 0.0, 1.0, 1.0], dtype=torch.float32)loss = bce_logits_loss(logits, targets)
print(f"BCEWithLogits Loss: {loss.item():.4f}")

参数说明

  • weight:与CrossEntropyLoss类似,用于样本加权重

  • pos_weight:正样本的权重,用于调整正负样本不平衡

  • reduction:同上

4. 损失函数总结与选择指南

损失函数适用场景特点
MAE (L1 Loss)回归问题对异常值不敏感,梯度恒定
MSE (L2 Loss)回归问题对异常值敏感,梯度随误差增大
CrossEntropyLoss多分类问题结合Softmax,直接处理类别概率
BCELoss二分类问题需配合Sigmoid使用,处理0-1概率
BCEWithLogitsLoss二分类问题结合Sigmoid,数值稳定性更好

选择建议

  1. 回归问题:

    • 数据中有异常值:优先考虑MAE

    • 数据质量较好:使用MSE

  2. 分类问题:

    • 二分类:使用BCEWithLogitsLoss

    • 多分类:使用CrossEntropyLoss

    • 类别不平衡:使用带权重的版本

  3. 特殊需求:

    • 需要更关注困难样本:考虑使用Focal Loss等变体

    • 多标签分类:可能需要组合多个BCELoss

5. 完整示例:MNIST分类中的损失函数应用

import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, transforms
from torch.utils.data import DataLoader# 数据准备
transform = transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.1307,), (0.3081,))
])train_dataset = datasets.MNIST('./data', train=True, download=True, transform=transform)
train_loader = DataLoader(train_dataset, batch_size=64, shuffle=True)# 简单模型
class Net(nn.Module):def __init__(self):super(Net, self).__init__()self.fc1 = nn.Linear(28*28, 128)self.fc2 = nn.Linear(128, 10)def forward(self, x):x = x.view(-1, 28*28)x = torch.relu(self.fc1(x))x = self.fc2(x)return xmodel = Net()
optimizer = optim.Adam(model.parameters(), lr=0.001)# 使用CrossEntropyLoss
criterion = nn.CrossEntropyLoss()# 训练循环
for epoch in range(5):for batch_idx, (data, target) in enumerate(train_loader):optimizer.zero_grad()output = model(data)loss = criterion(output, target)loss.backward()optimizer.step()if batch_idx % 100 == 0:print(f'Epoch: {epoch} | Batch: {batch_idx} | Loss: {loss.item():.4f}')

通过本文的详细讲解,相信您已经对深度学习中常见的损失函数有了全面的了解。在实际应用中,根据具体问题和数据特点选择合适的损失函数,是构建高效模型的重要一步。 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

http://www.dtcms.com/wzjs/289612.html

相关文章:

  • 365房产南京网站爱站网长尾关键词挖掘工具
  • 固安建设网站百度快速seo优化
  • 公章电子版在线制作网站刷关键词要刷大词吗
  • 企业网站建设建议郑州百度推广公司
  • 海洋cms怎么做电影网站网站推广和优化的原因网络营销
  • 做视频上传可以赚钱的网站阿里指数查询手机版
  • 类似12306网站开发免费开源代码网站
  • 微商代理0元0投入关键词排名优化
  • 安徽基层党组织建设网站seo技术教学视频
  • 白色网站配色百度电脑网页版入口
  • 苏州网站建设国家免费职业培训平台
  • 美食网站素材seo网站排名全选
  • 旅游门户网站建设方案如何让别人在百度上搜到自己公司
  • 基层建设论文收录在哪个网站ks免费刷粉网站推广
  • 制定网站建设规划书郑州网站优化公司
  • 网站信息建设百度指数查询排行榜
  • 鄱阳县精准扶贫旅游网站建设目的google seo
  • 天站网站建设域名注册网站查询
  • 黑龙江省营商环境建设监察局网站谷歌搜索排名规则
  • 有没有单纯做旅游攻略的网站怎么样创建网站
  • dede网站单页面怎么做今天新疆新闻头条
  • 猎头公司的工作模式不包括优化大师免安装版
  • 阿里虚拟主机无法安装wordpress百度ocpc怎么优化
  • 做网站用什么浏览器最好电商网站推广方案
  • php网站建设思路安卓优化大师下载安装到手机
  • soho网站建设下载百度语音导航地图
  • 天津自制网络营销推广优帮云排名优化
  • 做网站前期工作交换友情链接的目的
  • 简单的购物网站怎么做青岛seo公司
  • 品牌宣传网站建设知名做网站的公司