pytorch中的softmax回归和CrossEntropy损失函数

使用softmax求损失的过程中,需要经历以下几步:

1.应用softmax函数; 2.取对数; 3.计算损失

其中第1、2步可以使用torch.nn.LogSoftmax()完成,第3步可以使用torch.nn.NLLLoss完成

也可以使用torch.nn.CrossEntropyLoss一次性完成3步操作,构成一个完整的softmax分类器。(使用最多!!!)

CLASS torch.nn.CrossEntropyLoss(weight=None, size_average=None, ignore_index=-100, reduction=‘mean’)

在使用torch.nn.CrossEntropyLoss之前,最后一层不再需要激活函数(无需非线性变换)
在使用torch.nn.CrossEntropyLoss时,样本的真实类别Y应是一个LongTensor,值为各样本的类别标号。

torch.nn.CrossEntropyLoss使用举例:

import torch
import math
criterion = torch.nn.CrossEntropyLoss()

Y = torch.LongTensor([2,0,1])                   # 3个样本是真实标记分别为2,0,1
Y_pred1 = torch.Tensor([[0.1,0.2,0.9],
                        [1.1,0.1,0.2],
                        [0.2,2.1,0.1]])         # 注意这里没有经过激活函数(即softmax函数),而是直接扔进CrossEntropyLoss里
Y_pred2 =
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PyTorch实现softmax回归可以分为以下几个步骤: 1. 导入所需的库: ```python import torch import torch.nn as nn import torch.optim as optim ``` 2. 准备数据: 假设我们有一个大小为(N,D)的训练集,其N是样本数量,D是特征数量,以及一个大小为(N,)的标签集。可以使用`torch.tensor`将数据转换为PyTorch张量。 ```python X_train = torch.tensor(X_train, dtype=torch.float32) y_train = torch.tensor(y_train, dtype=torch.long) ``` 3. 定义模型: 在PyTorch,可以通过继承`nn.Module`类来定义模型。在softmax回归,我们使用线性变换和softmax函数。 ```python class SoftmaxRegression(nn.Module): def __init__(self, input_dim, num_classes): super(SoftmaxRegression, self).__init__() self.linear = nn.Linear(input_dim, num_classes) def forward(self, x): return self.linear(x) ``` 4. 实例化模型和损失函数: ```python input_dim = X_train.shape[1] # 输入特征数 num_classes = len(torch.unique(y_train)) # 类别数 model = SoftmaxRegression(input_dim, num_classes) criterion = nn.CrossEntropyLoss() ``` 5. 定义优化器: ```python optimizer = optim.SGD(model.parameters(), lr=learning_rate) ``` 6. 训练模型: ```python num_epochs = 100 for epoch in range(num_epochs): # 前向传播 outputs = model(X_train) # 计算损失 loss = criterion(outputs, y_train) # 反向传播和优化 optimizer.zero_grad() loss.backward() optimizer.step() # 打印训练信息 if (epoch+1) % 10 == 0: print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {loss.item():.4f}') ``` 这样就完成了使用PyTorch实现softmax回归的过程。你可以根据自己的数据和需求进行适当的调整和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值