深度学习中模型的推理和训练

目录

训练(training)阶段

会包含三步:

  1. 前向传播(forward):算预测结果
  2. 计算损失(loss)
  3. 反向传播(backward):计算梯度
  4. 参数更新(optimizer.step)

👉 这一步才需要梯度、计算图、反传。

在 PyTorch 里通常写成:

python 复制代码
import torch
import torch.nn as nn
import torch.optim as optim

# 1. 定义模型
model = nn.Linear(10, 1)

# 2. 损失函数 & 优化器
criterion = nn.MSELoss()
optimizer = optim.Adam(model.parameters(), lr=1e-3)

# 3. 切换到训练模式
model.train()

for epoch in range(100):
    # 假数据
    x = torch.randn(32, 10)
    y = torch.randn(32, 1)

    # ===== 前向传播 =====
    y_pred = model(x)
    loss = criterion(y_pred, y)

    # ===== 反向传播 =====
    optimizer.zero_grad()   # 清空旧梯度
    loss.backward()         # 计算梯度
    optimizer.step()        # 更新参数

    print(f"epoch {epoch}, loss = {loss.item():.4f}")

推理(inference)阶段

只做:

  • 前向传播
  • 不计算 loss
  • 不做反向传播
  • 不更新参数

因此:

  • 不需要梯度
  • 不需要保留计算图
  • 显存占用和计算量都更小
  • 速度更快

在 PyTorch 里通常写成:

python 复制代码
import torch
import torch.nn as nn

# 已训练好的模型
model = nn.Linear(10, 1)
model.load_state_dict(torch.load("model.pt"))

# 1. 切换到推理模式
model.eval()

# 2. 禁用梯度
with torch.no_grad():
    x = torch.randn(1, 10)

    # ===== 仅前向传播 =====
    y_pred = model(x)

print(y_pred)
相关推荐
fthux38 分钟前
装闭 RenoPit 源码解析(05):FastAPI与Celery如何执行AI装修分析
人工智能·ai·开源·github·open source·renopit
格数致用1 小时前
数据库设计与表结构详解|信息化项目全流程管理系统源码逐行精讲(五)
人工智能·政务·数据库设计·外键约束
罗西的思考1 小时前
【OpenClaw具身硬件】MiniClaw 阅读笔记---(1)基础
人工智能·算法·机器学习
DevUI团队1 小时前
从“即兴创作”到“规格先行”,华为云码道(CodeArts)代码智能体持续深耕企业级规范驱动开发能力
前端·人工智能·后端
论文避坑指南1 小时前
论文写作全流程AI合规边界:从选题到投稿的“红绿灯“清单
大数据·人工智能·深度学习
Dawson Zhu2 小时前
工业世界模型——基于AI Agent+数学仿真架构
人工智能·架构·agi
冬奇Lab2 小时前
开源项目第183期:Ontology Playground — 微软出品的本体论可视化学习工具,零后端、浏览器直接运行
人工智能·microsoft·开源
Wang's Blog2 小时前
AI Agent白手起家52: 从零搭建钉钉智能助手——资源准备与核心架构实现
人工智能·架构·钉钉
冬奇Lab2 小时前
代码库知识库系列(13):评测——怎么知道知识库够不够好
人工智能
字节跳动视频云技术团队2 小时前
把 AI 视频的钱花在刀刃上,不是每一刀上
人工智能·音视频开发