装饰公司用哪个招聘网站,秦皇岛电子网站建设,沧浪seo网站优化软件,设计ui属于什么专业1 损失函数的作用
损失函数是模型训练的基础#xff0c;并且在大多数机器学习项目中#xff0c;如果没有损失函数#xff0c;就无法驱动模型做出正确的预测。 通俗地说#xff0c;损失函数是一种数学函数或表达式#xff0c;用于衡量模型在某些数据集上的表现。损失函数在…1 损失函数的作用
损失函数是模型训练的基础并且在大多数机器学习项目中如果没有损失函数就无法驱动模型做出正确的预测。 通俗地说损失函数是一种数学函数或表达式用于衡量模型在某些数据集上的表现。损失函数在深度学习主要作用如下
衡量模型性能损失函数用于评估模型的预测结果与真实结果之间的误差程度。较小的损失值表示模型的预测结果与真实结果更接近反之则表示误差较大。因此损失函数提供了一种度量模型性能的方式。参数优化在训练机器学习和深度学习模型时损失函数被用作优化算法的目标函数。通过最小化损失函数可以调整模型的参数使模型能够更好地逼近真实结果。反向传播在深度学习中通过反向传播算法计算损失函数对模型参数的梯度。这些梯度被用于参数更新以便优化模型。损失函数在反向传播中扮演着重要的角色指导参数的调整方向。防止过拟合过拟合是指模型在训练数据上表现良好但在新数据上表现较差的现象。损失函数可以帮助在训练过程中监控模型的过拟合情况。通过观察训练集和验证集上的损失可以及早发现模型是否过拟合从而采取相应的措施如正则化等。
2 pytorch中常见的损失函数
损失函数名称适用场景torch.nn.MSELoss()均方误差损失回归torch.nn.L1Loss()平均绝对值误差损失回归torch.nn.CrossEntropyLoss()交叉熵损失多分类torch.nn.NLLLoss()负对数似然函数损失多分类torch.nn.NLLLoss2d()图片负对数似然函数损失图像分割torch.nn.KLDivLoss()KL散度损失回归torch.nn.BCELoss()二分类交叉熵损失二分类torch.nn.MarginRankingLoss()评价相似度的损失torch.nn.MultiLabelMarginLoss()多标签分类的损失多标签分类torch.nn.SmoothL1Loss()平滑的L1损失回归torch.nn.SoftMarginLoss()多标签二分类问题的损失 多标签二分类
2.1 L1损失函数
预测值与标签值进行相差然后取绝对值根据实际应用场所可以设置是否求和求平均公式可见下Pytorch调用函数nn.L1Loss import torch
import torch.nn as nnLoss_fn nn.L1Loss(size_averageNone, reduceNone, reductionmean)input torch.randn(3, 5, requires_gradTrue)
target torch.randn(3, 5)
output Loss_fn(input, target)
print(output)
运行结果显示如下
tensor(1.4177, grad_fnMeanBackward0)
2.2 L2损失函数
预测值与标签值进行相差然后取平方根据实际应用场所可以设置是否求和求平均公式可见下Pytorch调用函数nn.MSELoss import torch.nn as nn
import torchloss nn.MSELoss(size_averageNone, reduceNone, reductionmean)input torch.randn(3, 5, requires_gradTrue)
target torch.randn(3, 5)
output loss(input, target)
print(output)
运行结果显示如下
tensor(1.7956, grad_fnMseLossBackward0)
2.3 Huber Loss损失函数
简单来说就是L1和L2损失函数的综合版本结合了两者的优点公式可见下Pytorch调用函数nn.SmoothL1Loss import matplotlib.pyplot as plt
import torch# 定义函数和参数
smooth_l1_loss nn.SmoothL1Loss(reductionnone)
x torch.linspace(-1, 1, 10000)
y smooth_l1_loss(torch.zeros(10000), x)# 绘制图像
plt.plot(x, y)
plt.xlabel(x)
plt.ylabel(SmoothL1Loss)
plt.title(SmoothL1Loss Function)
plt.show() 运行结果显示如下 2.4 二分类交叉熵损失函数
简单来说就是度量两个概率分布间的差异性信息在某一程度上也可以防止梯度学习过慢公式可见下Pytorch调用函数有两个一个是nn.BCELoss函数用的时候要结合Sigmoid函数另外一个是nn.BCEWithLogitsLoss() import torch.nn as nn
import torchm nn.Sigmoid()
loss nn.BCELoss()
input torch.randn(3, requires_gradTrue)
target torch.empty(3).random_(2)
output loss(m(input), target)
print(output)
运行结果显示如下
tensor(0.6214, grad_fnBinaryCrossEntropyBackward0)
import torch
import torch.nn as nnlabel torch.empty((2, 3)).random_(2)
x torch.randn((2, 3), requires_gradTrue)bce_with_logits_loss nn.BCEWithLogitsLoss()
output bce_with_logits_loss(x, label)print(output) 运行结果显示如下
tensor(0.7346, grad_fnBinaryCrossEntropyWithLogitsBackward0)
2.5 多分类交叉熵损失函数
也是度量两个概率分布间的差异性信息Pytorch调用函数也有两个一个是nn.NLLLoss用的时候要结合log softmax处理另外一个是nn.CrossEntropyLoss
import torch
import torch.nn.functional as Finput torch.randn(3, 5, requires_gradTrue)
target torch.tensor([1, 0, 4])
output F.nll_loss(F.log_softmax(input, dim1), target)
print(output)
运行结果显示如下
tensor(2.9503, grad_fnNllLossBackward0)
import torch
import torch.nn as nnloss nn.CrossEntropyLoss()
inputs torch.randn(3, 5, requires_gradTrue)
target torch.empty(3, dtypetorch.long).random_(5)
output loss(inputs, target)print(output)
运行结果显示如下
tensor(1.6307, grad_fnNllLossBackward0)
2.6 自定义损失
通过对 nn 模块进行子类化将损失函数创建为神经网络图中的节点。 这意味着我们的自定义损失函数是一个 PyTorch 层与卷积层完全相同。
class Custom_MSE(nn.Module):def __init__(self):super(Custom_MSE, self).__init__();def forward(self, predictions, target):square_difference torch.square(predictions - target)loss_value torch.mean(square_difference)return loss_value# def __call__(self, predictions, target):# square_difference torch.square(y_predictions - target)# loss_value torch.mean(square_difference)# return loss_value
可以在“forward”函数调用或“call”内部定义损失的实际实现。
3 总结
损失函数在人工智能领域中起着至关重要的作用它不仅是模型训练和优化的基础也是评估模型性能、解决过拟合问题以及指导模型选择的重要工具。不同的损失函数适用于不同的问题和算法选择合适的损失函数对于取得良好的模型性能至关重要。