PyTorch中常用损失函数整理

一、nn.CrossEntropyLoss()交叉熵损失函数

1.函数介绍

信息量:它是用来衡量一个事件的不确定性的;一个事件发生的概率越大,不确定性越小,则它所携带的信息量就越小。假设X是一个离散型随机变量,其取值集合为X,概率分布函数为 p(x)=P(X=x), x\in X ,我们定义事件 X=x_{0} 的信息量为:I(x_{0})=-log(p(x_{0})),当 p(x_{0})=1 时,熵将等于0,也就是说该事件的发生不会导致任何信息量的增加。

熵:它是用来衡量一个系统的混乱程度的,代表一个系统中信息量的总和;信息量总和越大,表明这个系统不确定性就越大。

交叉熵:它主要刻画的是实际输出(概率)与期望输出(概率)的距离,也就是交叉熵的值越小,两个概率分布就越接近。交叉熵主要是用来判定实际的输出与期望的输出的接近程度,且交叉熵只关注真值非零的情况(通过后期的例子化简可以得知)。其计算方式为:

\mathbf{H(p,q)=-\sum p(x)log(q(x))}

例如对于一个三分类问题,我们期望得到的是p=(0,1,0),其中一个预测为q_{1}=(0.2,0.5,0.3),另一个预测为q_{2}=(0.1,0.8,0.1),则两个预测的交叉熵分别为:

H(p,q_{1})= - (0ln0.2 + 1ln0.5 + 0ln0.3)=-ln0.5\approx 0.69H(p,q_{2})= - (0ln0.1 + 1ln0.8 + 0ln0.1)=-ln0.8\approx 0.22

 可以得知q_{2}更为接近期望输出(交叉熵更小)。

2.使用示例

Pytorch中CrossEntropyLoss()函数的主要是将softmax-log-NLLLoss合并到一块得到的结果,所以在使用交叉熵函数之前不需要额外对input做softmax处理。

import torch
import torch.nn as nn

# 多分类问题,N是待预测目标个数,n_classes是类别总数
N = 1000
n_clssses = 16
# input是未经softmax处理的logit,target是分类真值
loss = nn.CrossEntropyLoss()
input = torch.randn(N, n_clssses, requires_grad=True)
target = torch.empty(N, dtype=torch.long).random_(n_clssses)
output = loss(input, target)

# input不可以是已经处理过的分类,如,(1,2,2,1,0),必须是float的概率值

nn.CrossEntropyLoss()参数解释
weight:一个可选的张量,用于对不同类别的损失进行加权。默认值为None,表示所有类别的损失权重相等。
size_average:一个布尔值,用于指定损失的计算方式。如果设置为True,则将损失进行平均;如果设置为False,则将损失进行求和。默认值为True。
ignore_index:一个整数,用于指定忽略的目标标签的索引。如果设置了该参数,则在计算损失时会忽略该索引对应的标签。默认值为-100。
reduction:一个字符串,用于指定损失的缩减方式。可选值有"mean"、“sum"和"none”。如果设置为"mean",则将损失进行平均;如果设置为"sum",则将损失进行求和;如果设置为"none",则不进行缩减,返回每个样本的损失值。默认值为"mean"。

3.参考资料

Pytorch常用的交叉熵损失函数CrossEntropyLoss()详解 - 知乎 (zhihu.com)

二、nn.BCELoss()二进制交叉熵损失函数

1.函数介绍

当交叉熵函数的类数为两类的特殊情况时,即变为二分类交叉熵函数,公式则变为:

H(p,q)=-[p(x_{1})log(q(x_{1}))+p(x_{2})log(q(x_{2}))] =-[p(x_{1})log(q(x_{1}))+(1-p(x_{1}))log(1-q(x_{1}))]

2.使用示例

此损失函数接受两个张量,第一个张量是正分类标签的概率值(满足概率的取值范围0-1),第二个张量是以0为负分类标签、1为正分类标签的目标数据值,且都必须为浮点类型。

import torch
import torch.nn as nn


# 二分类问题,N是待预测目标个数,n_classes是类别总数
N = 1000
n_clssses = 2
loss = nn.BCELoss()
input = torch.randn(N)    # input.shape=(N)
target = torch.empty(N,dtype=torch.float).random_(n_clssses)    # target.shape=(N)
output = loss(torch.sigmoid(input), target)    # input一定要先处理为0-1之间的概率

三、nn.BCEWithLogitsLoss()对数交叉熵损失函数

1.函数介绍

与二进制交叉熵损失函数类似,唯一不同点就是不需要对input进行sigmoid处理。

2.使用示例

import torch
import torch.nn as nn


# 二分类问题,N是待预测目标个数,n_classes是类别总数
N = 1000
n_clssses = 2
loss = nn.BCELoss()
input = torch.randn(N)    # input.shape=(N)
target = torch.empty(N,dtype=torch.float).random_(n_clssses)    # target.shape=(N)
output = loss(input, target)    # input一定要先处理为0-1之间的概率

四、 

  • 12
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PyTorch是一种开源的机器学习库,可以用于训练股票模型。在使用PyTorch进行股票训练时,可以按照以下步骤操作: 1. 数据准备:首先,需要收集和整理用于训练的股票数据。可以使用各种方式获取股票数据,如API接口、数据供应商或网络爬虫等。然后,将数据进行预处理,包括数据清洗、标准化和划分训练集、验证集和测试集等。 2. 模型设计:选择合适的神经网络模型来训练股票数据。PyTorch提供了丰富的神经网络模型和组件,可以根据具体需求选择合适的模型结构,如多层感知机(MLP)、循环神经网络(RNN)或卷积神经网络(CNN)等。还可以添加各种正则化、激活函数和损失函数等来提高模型的性能。 3. 损失函数和优化器选择:根据股票训练的目标,选择合适的损失函数和优化器进行模型训练。常用损失函数有均方误差(MSE)和交叉熵损失等,常用的优化器有随机梯度下降(SGD)、Adam和Adagrad等。 4. 训练模型:使用准备好的数据和选择的模型、损失函数及优化器进行模型训练。可以通过循环迭代的方式进行训练,在每个迭代周期,将输入数据喂给模型进行前向传播,计算损失,然后通过反向传播更新模型参数,不断优化模型。 5. 模型评估和优化:训练完成后,通过在测试集上对模型进行评估,计算相应的指标,如准确率、精确率和召回率等,来评估模型的性能。如果模型性能不尽如人意,可以调整模型参数、损失函数或优化器等来进行优化,提高模型的训练效果。 总之,PyTorch提供了强大的工具和灵活性,可以用于训练股票模型。通过合理的数据准备、模型设计、损失函数和优化器选择以及训练和评估过程,可以使用PyTorch开发出高性能的股票预测模型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值