news 2026/4/22 15:50:45

DAY46训练和测试的规范写法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
DAY46训练和测试的规范写法

目录

1. 训练和测试的规范写法:函数封装

2. 展平操作 (Flatten):除 Batch Size 外全部展平

3. Dropout 操作:训练“随机”,测试“全开”


1. 训练和测试的规范写法:函数封装

为了保持代码整洁、可复用,并将“逻辑”与“数据”解耦,标准做法是将训练和测试过程分别封装成独立的函数。

核心思想:无论输入是灰度图(MNIST)还是彩色图(CIFAR-10),训练和测试的函数代码逻辑是完全一样的。区别仅在于传入的dataloader(数据不同)和model(输入层维度不同)。

  • 训练函数train_loop

    • 职责:负责前向传播、计算损失、反向传播更新梯度。

    • 关键代码结构

      def train(dataloader, model, loss_fn, optimizer): model.train() # 1. 开启训练模式 (启用 Dropout/BatchNorm) for batch, (X, y) in enumerate(dataloader): X, y = X.to(device), y.to(device) # 2. 搬运数据 pred = model(X) # 3. 前向传播 loss = loss_fn(pred, y) # 4. 计算损失 optimizer.zero_grad() # 5. 梯度清零 loss.backward() # 6. 反向传播 optimizer.step() # 7. 更新参数
  • 测试函数test_loop

    • 职责:负责评估模型性能(Loss 和 Accuracy),不更新参数

    • 关键代码结构

      def test(dataloader, model, loss_fn): model.eval() # 1. 开启评估模式 (关闭 Dropout/锁定 BatchNorm) with torch.no_grad(): # 2. 停止梯度计算 (节省显存) for X, y in dataloader: X, y = X.to(device), y.to(device) pred = model(X) # ... 统计准确率和 Loss

2. 展平操作 (Flatten):除 Batch Size 外全部展平

全连接层(Linear Layer)无法接收 3D 或 4D 的图像张量,只能接收 1D 的特征向量。

  • 操作逻辑:保留第一个维度(Batch Size),将其余所有维度(通道 $C$、高 $H$、宽 $W$)“压扁”成一长条。

  • 维度变化

    • 输入形状:[Batch_Size, Channel, Height, Width]

    • 输出形状:[Batch_Size, Channel * Height * Width]

  • 代码实现:

    通常在模型的 __init__ 中定义,在 forward 中调用。

    self.flatten = nn.Flatten() # 默认 start_dim=1,即从第2个维度开始展平 # 或者在 forward 中直接写: x = x.view(x.size(0), -1)

3. Dropout 操作:训练“随机”,测试“全开”

Dropout 是防止过拟合的重要手段,其行为受到模型模式(Mode)的严格控制。

  • 训练阶段 (model.train())

    • 行为:按照设定的概率 p(如 0.2),随机丢弃部分神经元(输出置 0)。

    • 目的:增加学习难度,迫使神经元独立提取特征,不依赖特定路径,增强鲁棒性。

    • 注意:剩余的活跃神经元数值会被放大(),以保持总能量守恒。

  • 测试阶段 (model.eval())

    • 行为:Dropout完全关闭。所有神经元都参与计算,权重全开。

    • 目的:利用训练好的完整模型能力,输出最稳定、最准确的预测结果。


一句话总结三者关系:

我们在构建模型时加入 Flatten 以适配全连接层,加入 Dropout 以防止过拟合;在代码编写时,通过封装 train (开启 Dropout) 和 test (关闭 Dropout) 函数来规范化整个流程。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/19 19:53:42

NOTEBOOKLM新手教程:10分钟上手AI笔记神器

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 开发一个交互式NOTEBOOKLM学习向导应用。包含:1) 分步操作指引动画;2) 实时模拟练习环境;3) 常见问题解答模块;4) 学习进度跟踪。使…

作者头像 李华
网站建设 2026/4/20 18:18:41

VibeVoice能否生成企业培训语音教材?人力资源开发

VibeVoice能否生成企业培训语音教材?人力资源开发 在企业培训的日常实践中,HR团队常常面临一个尴尬的现实:精心设计的课程内容,最终却以单调的PPT朗读或生硬的单人录音呈现。学习者注意力难以集中,知识留存率低——问题…

作者头像 李华
网站建设 2026/4/22 0:37:01

AI一键搞定!快马平台自动生成Linux Nginx安装脚本

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 请为我的Ubuntu 22.04系统生成完整的Nginx安装脚本,要求:1.包含官方源添加步骤 2.自动安装最新稳定版 3.配置基础安全设置(如关闭server_tokens…

作者头像 李华
网站建设 2026/4/22 4:28:25

环境仿真软件:MIKE 21_(13).案例分析与应用

案例分析与应用 在前一节中,我们已经了解了环境仿真软件的基本操作和功能。接下来,我们将通过一系列实际案例来深入探讨如何在不同的应用场景中使用环境仿真软件进行二次开发,以满足特定的需求。本节将涵盖多个案例,包括水动力学模…

作者头像 李华
网站建设 2026/4/19 19:20:49

企业级IDEA环境配置实战:从零搭建开发环境

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个企业级IDEA配置演示项目,包含:1.多模块Maven项目模板 2.Git团队协作配置指南 3.与Jenkins的持续集成设置 4.代码质量检查工具(SonarQube)集成 5.数…

作者头像 李华
网站建设 2026/4/18 17:36:25

零售业实战:用SUPERSONIC BI打造智能补货系统

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 构建零售智能补货系统原型,需求:1. 接入模拟的POS交易和库存数据流 2. 建立动态安全库存计算模型,考虑季节性因素 3. 当库存低于阈值时自动触发…

作者头像 李华