news 2026/6/22 14:12:35

【模型训练函数构建】

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【模型训练函数构建】

train和val数据处理函数
FashionMNIST 下载train,输入大小28*28,输入格式Tensor
split 分割数据集,train_data=0.8train,val_data=0.2train
DataLoader 打包两个数据集 batch_size=32

train_model 训练模型函数

设置设备为GPU模式
设置Adam优化器,学习率=0.001 (用于梯度下降法)
损失函数为交叉熵函数
将模型放入训练设备中

for 循环设置20轮

for循环每次读取32张图片,次数=train_data数据量/batch_size
model.train(),开始训练
得到输出数据是32*10矩阵
torch.argmax(输出数据,dim=1),按照行读取最大值
经过计算得到这个batch的loss
累加每个batch的loss(用于计算一个epoch的loss)
累加每个batch预测正确的个数(用于计算一个epoch的计算精确度acc)

将梯度初始化为0
反向传播,梯度下降法更新参数


for循环每次读取32张图片,次数=val_data数据量/batch_size
model.eval(),开始验证
得到输出数据是32*10矩阵
torch.argmax(输出数据,dim=1),按照行读取最大值
经过计算得到这个batch的loss
累加每个batch的loss(用于计算一个epoch的loss)
累加每个batch预测正确的个数(用于计算一个epoch的计算精确度acc)

计算每个epoch中train和val的loss和acc(用于比较最优模型和绘图)
保存最高精度模型参数


在train_model 训练模型函数中

第一个 for 循环控制训练多少个 epoch。

第二个 for 循环是训练循环。
如果训练集有 8000 张图片,batch_size=32,
那么每个 epoch 会循环 250 次。
这 250 次不是得到 250 组参数,
而是对同一个模型参数连续更新 250 次。

第三个 for 循环是验证循环。
验证集不更新参数,只用来评价当前模型参数的效果。

每个 epoch 结束后,用验证集准确率判断当前这套参数是不是目前最好的。
如果是,就用 best_model_wts 保存下来。
最终得到的是验证集表现最好的那一套模型参数。



流程类似于

epoch 1: train loop: 8000/32 = 250 次 模型参数被更新 250 次 val loop: 2000/32 ≈ 63 次 模型参数不变,只计算 val_loss 和 val_acc 如果 val_acc 是目前最高: 保存当前参数 epoch 2: train loop: 继续在 epoch 1 的参数基础上更新 250 次 val loop: 测试当前参数 如果 val_acc 更高: 保存当前参数 epoch 3: train loop: 继续更新 250 次 val loop: 测试当前参数 如果 val_acc 更高: 保存当前参数
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/14 6:33:00

时间和空间复杂度

时间和空间复杂度 一、如何衡量一个算法的好坏 1. 算法效率 (1)算法效率分析分为两种:第一种是时间效率,第二种是空间效率。 (2)时间效率被称为时间复杂度,而空间效率被称作空间复杂度。 &#…

作者头像 李华
网站建设 2026/6/14 6:38:47

AutoGluon实战:7行代码实现Kaggle结构化数据Top 4%自动建模

1. 项目概述:当机器学习竞赛变成“七行代码”的日常操作你有没有在Kaggle排行榜上刷到过那种让人愣住的提交记录——模型分数稳居Top 4%,而Notebook里核心训练逻辑只有7行Python?不是隐藏了几十个cell的预处理和调参,也不是靠GPU集…

作者头像 李华