动手学深度学习softmax回归的笔记

动手学深度学习第三部分之softmax回归

3.4 softmax回归

3.4.1 分类问题

在分类问题中,我们需要将输入数据分为多个类别。例如,我们需要将手写数字图像分为0-9中的一个类别。分类问题可以分为二分类问题和多分类问题,二分类问题是将输入数据分为两个类别,多分类问题是将输入数据分为多个类别。

3.4.2 softmax回归模型

softmax回归是一种常用的多分类模型,它可以将输入数据分为多个类别。softmax回归模型的输出是一个概率分布,表示输入数据属于每个类别的概率。softmax回归模型的数学表达式如下:

复制代码
softmax(z_i) = exp(z_i) / sum(exp(z_j)) for j in 1..k

其中,z_i是模型的输入,k是类别数量。softmax函数将输入z_i转换为一个概率分布,使得所有类别的概率之和为1。

3.4.3 损失函数

在softmax回归中,常用的损失函数是交叉熵损失(Cross Entropy Loss)。交叉熵损失的数学表达式如下:

复制代码
CE(y, y_hat) = -sum(y_i * log(y_hat_i)) for i in 1..k

其中,y是真实标签,y_hat是模型的预测标签。交叉熵损失衡量的是真实标签和预测标签之间的差异,损失函数越小,说明模型的性能越好。

3.4.4 模型训练

softmax回归模型的训练过程和线性回归模型的训练过程类似,主要包括以下几个步骤:

  1. 初始化模型参数 :初始化模型的权重参数w和偏置项b
  2. 前向传播 :使用模型对输入数据进行预测,得到预测标签y_hat
  3. 计算损失:使用交叉熵损失计算预测标签和真实标签之间的差异。
  4. 反向传播:使用反向传播算法计算损失函数对模型参数的梯度。
  5. 更新参数 :使用优化算法更新模型的权重参数w和偏置项b
  6. 重复步骤2-5:重复步骤2-5,直到模型收敛。

3.4.5 模型评估

在模型训练完成后,我们需要对模型进行评估,以评估模型的性能。常用的评估指标包括准确率(Accuracy)、精确率(Precision)、召回率(Recall)和F1值(F1 Score)。

3.4.5.1 准确率

准确率是指模型预测正确的样本数量占总样本数量的比例。准确率的数学表达式如下:

复制代码
Accuracy = (TP + TN) / (TP + TN + FP + FN)

其中,TP是真正例,TN是真负例,FP是假正例,FN是假负例。

3.4.5.2 精确率

精确率是指模型预测为正例的样本中真正例的比例。精确率的数学表达式如下:

复制代码
Precision = TP / (TP + FP)
3.4.5.3 召回率

召回率是指真正例的样本中模型预测为正例的比例。召回率的数学表达式如下:

复制代码
Recall = TP / (TP + FN)
3.4.5.4 F1值

F1值是精确率和召回率的调和平均数,它综合考虑了精确率和召回率。F1值的数学表达式如下:

复制代码
F1 = 2 * (Precision * Recall) / (Precision + Recall)

3.4.6 模型实现

在PyTorch中,我们可以使用nn.Linearnn.Softmax来实现softmax回归模型。以下是一个使用PyTorch实现softmax回归模型的示例:

python 复制代码
import torch
import torch.nn as nn
import torch.optim as optim

# 超参数设置
input_dim = 784
hidden_dim = 256
output_dim = 10
lr = 0.01
epochs = 10

# 定义模型
class SoftmaxRegression(nn.Module):
    def __init__(self, input_dim, hidden_dim, output_dim):
        super().__init__()
        self.fc1 = nn.Linear(input_dim, hidden_dim)
        self.fc2 = nn.Linear(hidden_dim, output_dim)
        self.softmax = nn.Softmax(dim=1)
    
    def forward(self, x):
        x = self.fc1(x)
        x = nn.ReLU()(x)
        x = self.fc2(x)
        x = self.softmax(x)
        return x

# 初始化模型
model = SoftmaxRegression(input_dim, hidden_dim, output_dim)

# 定义损失函数和优化器
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=lr)

# 训练模型
for epoch in range(epochs):
    model.train()
    total_loss = 0.0
    for X_batch, y_batch in train_loader:
        # 前向传播
        y_hat = model(X_batch)
        
        # 计算损失
        loss = criterion(y_hat, y_batch)
        
        # 反向传播
        optimizer.zero_grad()
        loss.backward()
        
        # 更新参数
        optimizer.step()
        
        total_loss += loss.item()
    
    # 打印每轮训练信息
    if (epoch + 1) % 1 == 0:
        avg_loss = total_loss / len(train_loader)
        print(f"Epoch [{epoch+1}/{epochs}], Loss: {avg_loss:.4f}")

# 评估模型
model.eval()
correct = 0
total = 0
with torch.no_grad():
    for X_batch, y_batch in test_loader:
        y_hat = model(X_batch)
        _, predicted = torch.max(y_hat.data, 1)
        total += y_batch.size(0)
        correct += (predicted == y_batch).sum().item()

print(f"Accuracy of the network on the 10000 test images: {100 * correct / total}%")

总结

通过本文的介绍,我们深入了解了softmax回归模型的原理和实现方法。softmax回归是一种常用的多分类模型,它可以将输入数据分为多个类别。在实际应用中,我们可以使用PyTorch来实现softmax回归模型,并使用交叉熵损失来训练模型。同时,我们还介绍了模型评估的常用指标,如准确率、精确率、召回率和F1值。

相关推荐
时间之里2 小时前
【深度学习】:RF-DETR与yolo对比
人工智能·深度学习·yolo
叶小鸡3 小时前
Java 篇-项目实战-苍穹外卖-笔记汇总
java·开发语言·笔记
AI-Frontiers3 小时前
transformer进阶之路:#2 工作原理详解
人工智能·深度学习·transformer
sakiko_4 小时前
UIKit学习笔记4-使用UITableView制作滚动视图
笔记·学习·ios·swift·uikit
晓梦林5 小时前
MAZESEC-X1靶场学习笔记
笔记·学习
xyz5996 小时前
ONNX Runtime(ORT) C++ Windows 深度学习模型部署简易教程
人工智能·深度学习
热爱生活的五柒7 小时前
深度学习大幅度提高准确率方法,本人亲测,调参方法,大幅度提升准确率方法(极其重要!!!多次看!0430)
人工智能·深度学习
PNP Robotics8 小时前
领军军者|PNP机器人包文涛:以具身智能定义机器人的“生命直觉”
人工智能·深度学习·学习·机器学习·机器人
Chockong8 小时前
05_yolox_s的后处理截断并导出onnx
深度学习·神经网络
云上码厂8 小时前
2023年之前物理信息神经网络PINN papers
人工智能·深度学习·神经网络