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

一文看明白PyTorch 模型设计训练保存加载预测

需求

输入x
128维

fc1
Linear 128→96

ReLU激活

Dropout 0.2

fc2
Linear 96→64

ReLU激活

Dropout 0.2

fc3
Linear 64→32

输出out
32维

代码样例

包含训练 → 保存 → 加载 → 预测,代码可以直接运行:

importtorchimporttorch.nnasnnimporttorch.optimasoptimfromtorch.utils.dataimportDataLoader,TensorDataset# -----------------------------# 1. 定义模型# -----------------------------classSimpleModel(nn.Module):def__init__(self):super(SimpleModel,self).__init__()self.fc1=nn.Linear(128,96)self.fc2=nn.Linear(96,64)self.fc3=nn.Linear(64,32)self.relu=nn.ReLU()self.dropout=nn.Dropout(0.2)defforward(self,x):x=self.relu(self.fc1(x))x=self.dropout(x)x=self.relu(self.fc2(x))x=self.dropout(x)out=self.fc3(x)returnout# -----------------------------# 2. 准备数据 (示例随机数据)# -----------------------------X=torch.randn(1000,128)y=torch.randn(1000,32)dataset=TensorDataset(X,y)batch_size=32dataloader=DataLoader(dataset,batch_size=batch_size,shuffle=True)# -----------------------------# 3. 定义损失函数和优化器# MSELoss Mean Squared Error(均方误差)# -----------------------------model=SimpleModel()criterion=nn.MSELoss()optimizer=optim.Adam(model.parameters(),lr=0.001)# -----------------------------# 4. 训练循环# -----------------------------num_epochs=20forepochinrange(num_epochs):model.train()# 训练模式epoch_loss=0forbatch_X,batch_yindataloader:optimizer.zero_grad()outputs=model(batch_X)loss=criterion(outputs,batch_y)loss.backward()optimizer.step()epoch_loss+=loss.item()*batch_X.size(0)epoch_loss/=len(dataset)print(f"Epoch{epoch+1}/{num_epochs}, Loss:{epoch_loss:.4f}")# -----------------------------# 5. 保存训练好的模型参数# -----------------------------torch.save(model.state_dict(),"simple_model.pth")print("模型参数已保存到 simple_model.pth")# -----------------------------# 6. 加载模型进行预测# -----------------------------# 重新创建模型对象model_loaded=SimpleModel()# 加载保存的参数model_loaded.load_state_dict(torch.load("simple_model.pth"))# 切换到评估模式model_loaded.eval()# 假设有新样本 x_newx_new=torch.randn(5,128)withtorch.no_grad():# 推理时禁用梯度y_pred=model_loaded(x_new)print("加载模型预测结果形状:",y_pred.shape)# [5, 32]

✅ 特点

  1. 训练完成后保存权重simple_model.pth可以随时加载。
  2. 加载模型时必须重新创建类,然后load_state_dict
  3. 推理时切换到eval()模式,保证 Dropout 不随机失活。
  4. 使用torch.no_grad()提升预测效率,减少显存占用。

http://www.gsyq.cn/news/1356325.html

相关文章:

  • 红小豆抗逆与品质协同改良:与工业化研发平台合作的降本增效策略
  • 可视化跨平台Node.js管理:如何告别命令行依赖,实现高效多版本切换
  • 如何用Akagi麻雀助手快速提升雀魂游戏水平:3个核心技巧
  • 选择Taotoken的Token Plan套餐后我的月度成本变化实录
  • EXCEL文件展示MLP的计算过程
  • Claude如何3秒定位《民法典》第584条关联条款?——基于172份裁判文书验证的法律语义映射模型
  • 如何在5分钟内构建你的第一个WaveTerm跨平台终端插件:终极入门指南 [特殊字符]
  • 终极指南:如何用TQVaultAE管理你的泰坦之旅装备库
  • 我为什么写了一个 Syslog 查看器
  • 简单说明--程序系统如何对用户身份证实名认证接口api
  • Spring 两大核心思想(一):IoC
  • 专业的建筑资质办理哪个性价比高
  • GHelper技术解析:基于ACPI直接通信的华硕笔记本轻量级控制方案
  • ClaudeCode用户如何迁移到Taotoken避免封号与Token不足
  • 从三星SolarCell遥控器到微光PMIC:太阳能遥控器的电源管理关键
  • 从 ERP 到车间现场:智能工厂平台选型的 7 类工具合集
  • 抖音内容获取革命:一个工具解锁创作自由的无限可能
  • 饱和度越调越脏?97%新手踩中的3个色彩空间陷阱(RGB/HSV/LCh混淆、gamma预补偿缺失、CLIP语义漂移),附自动检测脚本
  • 源网荷储政策解读:国家战略与地方实施方案
  • Tigshop 开源商城系统 JAVA v5.8.28 版本发布|『角色权限管理+店铺后台跳转逻辑』优化
  • 1534. 统计好三元组
  • 通过用量看板分析团队开发中各模型消耗占比与优化方向
  • 从零到精通:Path of Building PoE2构建规划完全指南
  • Lindy元数据驱动自动化:如何用1个Schema定义自动生成8类分析任务+监控看板
  • Claude投资回报率究竟怎么算?揭秘企业级ROI模型的7个隐藏变量与实时测算模板
  • WSA Toolbox:Windows 11上一键安装Android应用的智能解决方案
  • 终极指南:快速掌握Hybrid A*路径规划器
  • 合同审查效率提升800%,但92%律所尚未启用Agent——这6个司法鉴定级验证指标决定成败
  • PDF补丁丁文本替换功能深度解析:从基础操作到高级自动化
  • 免费Flash反编译工具:JPEXS Free Flash Decompiler完整使用指南