动手学深度学习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值。

相关推荐
暖暖木头14 小时前
playwright学习笔记
笔记·学习
温柔只给梦中人14 小时前
深度学习:day03-04
人工智能·深度学习
棒棒的皮皮14 小时前
【深度学习】YOLO 模型部署全攻略(本地 / 嵌入式 / 移动端)
人工智能·深度学习·yolo·计算机视觉
hetao173383714 小时前
2026-01-06 hetao1733837 的刷题笔记
c++·笔记·算法
棒棒的皮皮14 小时前
【深度学习】YOLO模型速度优化全攻略(模型 / 推理 / 硬件三层维度)
人工智能·深度学习·yolo·计算机视觉
qq_3975623115 小时前
昆仑通态屏幕 , 脚本使用笔记
笔记
koo36415 小时前
pytorch深度学习笔记12
pytorch·笔记·深度学习
慕容雪_17 小时前
运维笔记-网络共享
运维·笔记·网络共享
Yeats_Liao17 小时前
MindSpore开发之路(二十五):融入开源:如何为MindSpore社区贡献力量
人工智能·分布式·深度学习·机器学习·华为·开源