当前位置: 首页 > news >正文

第十一站:深度学习模型的训练与评估

1. 批量训练(Batch Training)

在深度学习中,由于数据量庞大,我们通常将数据集划分为多个小批次(batch),然后逐个批次地训练模型。这样做可以带来很多好处,比如 提高计算效率减少内存消耗避免梯度波动过大 等。

批量训练的工作原理:
  1. 批量大小(Batch Size):是每次迭代中使用的数据样本的数量。常见的批量大小有 32、64、128 等。
  2. 每个 epoch 中的迭代次数:一个 epoch 是对整个数据集的一次训练,通常每个 epoch 会划分成多个批次。
  3. 计算平均梯度:每个批次的梯度会被计算并应用到模型参数中。
批量训练的优点:
  • 计算效率:通过将数据分批次处理,能够利用现代 GPU 并行计算的优势。
  • 稳定性:相比于对整个数据集进行一次训练(全批量训练),批量训练能够在每个小批次中计算梯度,减少了梯度计算中的波动。
  • 内存消耗:批量训练可以控制每次训练时的数据量,减少内存占用,避免加载整个数据集到内存中。
代码示例:使用 PyTorch 进行批量训练
import torch
from torch.utils.data import DataLoader, TensorDataset

# 假设我们有训练数据 X 和标签 y
X = torch.randn(1000, 10)  # 1000 个样本,每个样本有 10 个特征
y = torch.randint(0, 2, (1000,))  # 1000 个标签,二分类任务

# 将数据封装为 TensorDataset
dataset = TensorDataset(X, y)

# 使用 DataLoader 按批次加载数据,设置批量大小为 32
dataloader = DataLoader(dataset, batch_size=32, shuffle=True)

# 定义简单的模型
model = torch.nn.Linear(10, 2)  # 10 个输入特征,2 个输出类别

# 使用优化器和损失函数
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
criterion = torch.nn.CrossEntropyLoss()

# 训练模型
for epoch in range(10):  # 训练 10 个 epoch
    for batch_X, batch_y in dataloader:  # 按批次迭代数据
        optimizer.zero_grad()  # 清空梯度
        output = model(batch_X)  # 前向传播
        loss = criterion(output, batch_y)  # 计算损失
        loss.backward()  # 反向传播
        optimizer.step()  # 更新参数
    
    print(f'Epoch {epoch+1}, Loss: {loss.item()}')  # 打印每个 epoch 的损失
2. 数据预处理(Data Preprocessing)

深度学习模型的训练通常需要对数据进行预处理,包括 归一化标准化数据增强 等。数据预处理可以提高模型的训练效果,并加速模型的收敛。

常见的数据预处理步骤:
  1. 归一化(Normalization)

    • 将数据缩放到一个指定的范围(例如 [0, 1])。常用于图像数据和特征数据。

    • 常用公式
      X n o r m = X − X m i n X m a x − X m i n X_{norm} = \frac{X - X_{min}}{X_{max} - X_{min}} Xnorm=XmaxXminXXmin

      将数据映射到 [0, 1] 区间。

  2. 标准化(Standardization)

    • 将数据转化为均值为 0,标准差为 1 的分布。常用于所有类型的数据。

    • 常用公式
      X s t d = X − μ σ X_{std} = \frac{X - \mu}{\sigma} Xstd=σXμ

      其中, μ \mu μ是均值, σ \sigma σ是标准差。

  3. 数据增强(Data Augmentation)

    • 对图像数据进行增强,通过随机裁剪、旋转、翻转等操作,生成更多的训练样本。
    • 在训练深度学习模型时,数据增强可以增加数据的多样性,减少过拟合。
代码示例:使用 PyTorch 进行数据预处理
from torchvision import transforms
from PIL import Image

# 定义数据预处理过程
transform = transforms.Compose([
    transforms.Resize(256),  # 调整图片大小
    transforms.CenterCrop(224),  # 中心裁剪图片
    transforms.ToTensor(),  # 转换为张量
    transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])  # 归一化处理
])

# 加载图像并进行预处理
img = Image.open('example.jpg')
img_tensor = transform(img)
3. 模型评估与评估指标(Evaluation Metrics)

在训练模型之后,我们需要使用 评估指标 来衡量模型在验证集或测试集上的表现。常见的评估指标包括:

  1. 分类任务评估指标

    • 准确率(Accuracy):正确预测的比例。
    • 精确率(Precision)召回率(Recall)F1 分数(F1 Score)
    • ROC AUC:曲线下面积,衡量模型的整体性能。
  2. 回归任务评估指标

    • 均方误差(MSE)均方根误差(RMSE)
    • R? 分数:衡量模型对数据变异的解释能力。
代码示例:计算分类任务的评估指标
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score

# 假设我们有真实标签 y_true 和预测标签 y_pred
y_true = [0, 1, 1, 0, 1]
y_pred = [0, 1, 0, 0, 1]

# 计算分类准确率
accuracy = accuracy_score(y_true, y_pred)
# 计算精确率、召回率和 F1 分数
precision = precision_score(y_true, y_pred)
recall = recall_score(y_true, y_pred)
f1 = f1_score(y_true, y_pred)

print(f"Accuracy: {accuracy:.2f}")
print(f"Precision: {precision:.2f}")
print(f"Recall: {recall:.2f}")
print(f"F1 Score: {f1:.2f}")

个人总结:练习使得自己进步:都学到这里了,大概也对深度学习和机器学习有一个了解,在学习的过程中,我们要弄懂沿途的代码,并学会思考,去编写属于自己的代码,那样的自己才是真正成长的

相关文章:

  • Cramér-Rao界:参数估计精度的“理论底线”
  • IO/网络IO基础全览
  • PostgreSQL的学习心得和知识总结(一百七十)|深入理解PostgreSQL数据库之 处理HAVING子句 的使用和实现
  • HaProxy基本配置详解
  • sort_values、sort 和 sorted 的区别与用法详解
  • 网络安全学习-常见安全漏洞检测以及修复方法-1
  • 2025面试Go真题第一场
  • [算法--前缀和] 二维前缀和
  • ReentrantLock 用法与源码剖析笔记
  • 数据库的基本操作
  • 前端项目部署阻止用户打开控制台
  • BGP状态和机制
  • 鱼皮智能云图库项目学习
  • Unity基础学习(二)
  • docker 占用系统空间太大了,整体迁移到挂载的其他磁盘|【当前普通用户使用docker时,无法指定镜像、容器安装位置【无法指定】】
  • 从 Spring Boot 2 升级到 Spring Boot 3 的终极指南
  • 02、Hadoop3.x从入门到放弃,第二章:集群环境搭建
  • 从零开始用react + tailwindcs + express + mongodb实现一个聊天程序(三) 实现注册 登录接口
  • Gin框架深度解剖:路由树的实现原理
  • 蓝桥杯单片机基础部分——1.5基础模块代码升级
  • 织梦网站首页是哪个文件/怎么快速优化网站排名
  • 湖北专业网站建设质量保障/网络营销有什么岗位
  • 大数据平台的搭建/seo刷点击软件
  • 静态班级网站/企业培训体系搭建
  • 绍兴做网站/国家免费技能培训
  • 无锡网络公司服务平台/我赢seo