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

Pytorch实战——完整的模型训练套路2

验证


加入Tensorboard


验证


创建dataset,dataloader加载数据,设置模型的层数,定义损失函数,定义优化器,设置网络参数,开始训练,验证模型,可视化结果

# 导入所需库
import torchvision
from torch.utils.tensorboard import SummaryWriter
# 从自定义 model 模块导入所有内容(需确保 model.py 定义了 Tudui 类)
from model import *  
from torch import nn
from torch.utils.data import DataLoader# 准备 CIFAR10 训练数据集
# root 为数据集保存路径,train=True 表示训练集,ToTensor 转换为张量,download=True 自动下载
train_data = torchvision.datasets.CIFAR10(root="../data", train=True, transform=torchvision.transforms.ToTensor(),download=True)
# 准备 CIFAR10 测试数据集,train=False 表示测试集,其余参数含义同训练集
test_data = torchvision.datasets.CIFAR10(root="../data", train=False, transform=torchvision.transforms.ToTensor(),download=True)# 获取训练、测试数据集的样本数量
train_data_size = len(train_data)
test_data_size = len(test_data)
# 打印数据集长度信息
print("训练数据集的长度为: {}".format(train_data_size))
print("测试数据集的长度为: {}".format(test_data_size))# 利用 DataLoader 按批次加载数据集,batch_size=64 表示每批 64 个样本
train_dataloader = DataLoader(train_data, batch_size=64)
test_dataloader = DataLoader(test_data, batch_size=64)# 创建自定义的 Tudui 神经网络模型实例
tudui = Tudui()# 定义损失函数,使用交叉熵损失,适用于分类任务
loss_fn = nn.CrossEntropyLoss()# 定义优化器,使用随机梯度下降(SGD),学习率设为 1e-2(即 0.01 ),优化模型参数
learning_rate = 1e-2
optimizer = torch.optim.SGD(tudui.parameters(), lr=learning_rate)# 训练过程参数初始化
total_train_step = 0  # 记录训练步数
total_test_step = 0  # 记录测试步数
epoch = 10  # 训练的轮数# 创建 SummaryWriter,用于在 TensorBoard 中记录日志,日志保存路径为 ../logs_train
writer = SummaryWriter("../logs_train")# 开始训练循环,执行 epoch 轮训练
for i in range(epoch):print("-------第 {} 轮训练开始-------".format(i + 1))# 训练步骤:将模型设为训练模式(会启用 dropout、批量归一化的训练行为等)tudui.train()for data in train_dataloader:imgs, targets = data  # 从数据加载器中取出一批图像和对应的标签outputs = tudui(imgs)  # 将图像输入模型,得到预测输出loss = loss_fn(outputs, targets)  # 计算预测输出与真实标签的损失# 优化器更新模型参数的流程optimizer.zero_grad()  # 清空过往梯度loss.backward()  # 反向传播计算梯度optimizer.step()  # 根据梯度更新模型参数total_train_step += 1  # 训练步数加 1# 每 100 步打印训练信息并记录到 TensorBoardif total_train_step % 100 == 0:print("训练次数: {}, Loss: {}".format(total_train_step, loss.item()))writer.add_scalar("train_loss", loss.item(), total_train_step)# 测试步骤:将模型设为评估模式(会关闭 dropout、批量归一化的训练行为等,使用推理模式)tudui.eval()total_test_loss = 0  # 记录测试集总损失total_accuracy = 0  # 记录测试集总准确率# 测试时不需要计算梯度,加快速度并节省内存with torch.no_grad():for data in test_dataloader:imgs, targets = data  # 取出一批测试图像和标签outputs = tudui(imgs)  # 模型预测loss = loss_fn(outputs, targets)  # 计算损失total_test_loss += loss.item()  # 累加测试损失# 计算该批样本的准确率:预测类别与真实类别匹配的数量accuracy = (outputs.argmax(1) == targets).sum()total_accuracy += accuracy  # 累加正确数量# 打印测试集整体损失和准确率print("整体测试集上的 Loss: {}".format(total_test_loss))print("整体测试集上的正确率: {}".format(total_accuracy / test_data_size))# 将测试损失、准确率记录到 TensorBoardwriter.add_scalar("test_loss", total_test_loss, total_test_step)writer.add_scalar("test_accuracy", total_accuracy / test_data_size, total_test_step)total_test_step += 1  # 测试步数加 1# 每轮训练结束后保存模型,文件名含当前轮数 itorch.save(tudui, "tudui_{}.pth".format(i))print("模型已保存")# 训练结束后关闭 SummaryWriter,释放资源
writer.close()

http://www.dtcms.com/a/270161.html

相关文章:

  • GitOps实践指南:GitLab CI/CD + ArgoCD 实现 Kubernetes 自动化部署
  • 【AI大模型】深度学习正则化技术:Batch Normalization (BatchNorm) 详解
  • 【GPT深度研究】科研SaaS项目可行性分析报告
  • 【学习笔记】网络设备(华为交换机)基础知识 24 —— 以太网子接口基础知识
  • 【入门级-C++程序设计:3、程序基本语句-多层循环语句】
  • 数据推荐|标贝科技大规模高质量数据集
  • 25.安卓逆向2-frida hook技术-拦截弹框事件(拦截强制更新弹框和解决jadx加载dex文件不全问题)
  • 从0到1搭建ELK日志收集平台
  • 扣子Coze飞书多维表插件参数获取流程
  • 如何利用机器学习(ML)检测异常登录行为
  • 深深浅浅地理解 Python 中的 `Barrier` 对象
  • emscripten编译cocos2dx项目输入框支持中文
  • MySQL 全库表记录统计与空间估算教程
  • 猿人学js逆向比赛第一届第十五题
  • SpringAI学习笔记-MCP服务器简单示例
  • 软考(软件设计师)数据库原理-SQL
  • HTML+JS+CSS制作一个数独游戏
  • CSS揭秘:9.自适应的椭圆
  • 记一次mount point is busy问题排查
  • 数据结构 —— 栈(stack)在算法思维中的巧妙运用
  • C++进阶—二叉树进阶
  • 笔记/TCP/IP四层模型
  • Fence-音视频设备资源同步
  • IT 技术领域创作者三周年纪念日
  • 【CodeTop】每日练习 2025.7.8
  • Java 阻塞队列:7种类型全解析
  • 起重机械的工作循环门限值计算逻辑
  • 容器技术入门与Docker环境部署
  • Ntfs!LfsRestartLogFile函数分析之两次调用Ntfs!LfsReadRestart函数的目的
  • (生活比喻-图文并茂)http2.0和http3.0的队头阻塞,http2.0应用层解决,TCP层存在,3.0就是彻底解决,到底怎么理解区别???