news 2026/6/15 22:53:43

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/6/15 19:16:20

卡尔曼滤波算法实战应用案例分享

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个卡尔曼滤波算法实战项目,包含完整的功能实现和部署方案。点击项目生成按钮,等待项目生成完整后预览效果 今天想和大家分享一个特别实用的技术——卡…

作者头像 李华
网站建设 2026/6/15 14:58:39

VibeVoice能否生成车载导航语音?智能交通系统接入

VibeVoice能否生成车载导航语音?智能交通系统接入 在一辆自动驾驶测试车上,驾驶员正通过语音与座舱助手交流:“前面路口怎么走?” “右转进入辅路,注意避让非机动车。”助手回应道,语气平稳、节奏自然&…

作者头像 李华
网站建设 2026/6/15 13:34:56

哈夫曼编码在实时视频传输中的实战应用

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个视频帧压缩演示系统,要求:1. 实现基于哈夫曼编码的视频帧压缩算法 2. 支持实时摄像头输入和视频文件处理 3. 显示原始帧和压缩帧的对比 4. 统计压缩…

作者头像 李华
网站建设 2026/6/15 12:51:52

PCIe-Message Request Rules(一)

Gen5规范定义了以下11 中Message 类型: 1. INTx Interrupt Signaling(INTx 中断信号) 使用场合:旧式中断仿真 说明:为了兼容不支持 MSI(Message Signaled Interrupts)的旧设备和软件,PCIe 使用 Message TLP 来模拟传统的 INTx(INT A/B/C/D)中断线信号。当设备需要发…

作者头像 李华
网站建设 2026/6/15 12:31:01

解锁跨平台游戏模组:这款免费工具让你轻松获取任意平台模组

解锁跨平台游戏模组:这款免费工具让你轻松获取任意平台模组 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 还在为Epic Games Store或GOG平台购买的游戏无法使用Ste…

作者头像 李华
网站建设 2026/6/15 12:31:01

通信协议仿真:TCP_IP协议栈仿真_(1).TCP-IP协议栈概述

TCP/IP协议栈概述 1. 引言 TCP/IP协议栈是互联网通信的基础,它定义了一套规则和标准,使不同类型的网络设备和应用程序能够相互通信。TCP/IP协议栈不仅包括传输控制协议(TCP)和互联网协议(IP),还…

作者头像 李华