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

PyTorch 模型构建

搭模型

nn.Module:所有模型 / 层的 “妈妈类”,想自定义模型或层,继承它准没错,还能自动管理参数(不用自己记权重)。

nn.Sequential:按顺序装层的 “盒子”,比如 “展平层→全连接层→激活层”,不用写复杂的连接逻辑,适合简单模型。

nn.functional:放无参数的 “小工具”,比如 ReLU 激活、池化,在模型里直接调用就行

1. 简单模型:用 nn.Sequential

适合层按顺序排的场景(比如普通分类模型),一行代码串起所有层:

python运行

import torch.nn as nn
# 输入28×28的图片,输出10个类别
model = nn.Sequential(nn.Flatten(),  # 把28×28展成784维向量nn.Linear(784, 300),  # 全连接层:784→300nn.ReLU(),  # 激活函数nn.Linear(300, 10),  # 输出层:300→10nn.Softmax(dim=1)  # 转成类别概率
)

2. 灵活模型:继承 nn.Module

如果层连接复杂(比如有分支),就自己定义模型,核心写 2 部分:

__init__:定义要用的层;

forward:定义数据怎么在层里走。

python运行

class MyModel(nn.Module):def __init__(self):super().__init__()# 1. 定义层self.flatten = nn.Flatten()self.linear1 = nn.Linear(784, 300)self.linear2 = nn.Linear(300, 10)def forward(self, x):# 2. 定义数据路径x = self.flatten(x)x = self.linear1(x)x = nn.functional.relu(x)  # 用nn.functional的激活x = self.linear2(x)return xmodel = MyModel()  # 实例化模型

3. 复杂模型:Module + 容器组合

如果模型分多个 “子模块”(比如 ResNet 的残差块),用 nn.Sequential 把子模块装起来,代码更清晰:

python运行

class ResBlock(nn.Module):# 自定义残差块(子模块)def __init__(self):super().__init__()self.conv = nn.Sequential(  # 子模块里用Sequentialnn.Conv2d(64, 64, 3, padding=1),nn.ReLU())def forward(self, x):return x + self.conv(x)  # 残差连接:输入+卷积输出# 用子模块搭完整模型
class ResNetSimple(nn.Module):def __init__(self):super().__init__()self.start = nn.Conv2d(3, 64, 3)self.blocks = nn.Sequential(  # 装多个残差块ResBlock(),ResBlock())def forward(self, x):x = self.start(x)x = self.blocks(x)return x

python运行

import torch
import torch.optim as optim# 1. 装数据(假设已做好预处理)
train_loader = ...  # 自己定义的DataLoader# 2. 初始化模型、损失、优化器
model = MyModel()
criterion = nn.CrossEntropyLoss()  # 分类任务
optimizer = optim.Adam(model.parameters(), lr=1e-4)# 3. 训练循环
for epoch in range(5):  # 训练5轮for data, label in train_loader:# 前向:算预测output = model(data)# 算损失loss = criterion(output, label)# 反向:清梯度→算梯度→更参数optimizer.zero_grad()loss.backward()optimizer.step()print(f"第{epoch+1}轮,损失:{loss.item():.4f}")

总结

PyTorch 搭模型的核心是 “先拆模块,再拼整体”:简单模型用Sequential,复杂模型继承nn.Module;训练就是 “数据→算误差→调参数” 的循环。记住这些,就能应对大部分基础任务啦

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

相关文章:

  • 网站如何建设与安全管理制度网站建设跟版网
  • Spring Cloud Alibaba快速入门-Sentinel流量控制(FlowRule)
  • 给你一个网站seo如何做百度ai人工智能
  • 网站建设实验步骤盘锦网站建设流程
  • UNet改进(40):CrossTemporalUNet在3D时序数据处理中的应用
  • 计算机组成原理:时序产生器和控制方式
  • 写作助手系统:AI辅助内容创作的技术实现
  • 网站开发完整视频网站做填充
  • 医院 网站后台管理asp网站建设外文参考文献
  • FMCW雷达:从理论到MATLAB GNU Radio双平台验证
  • 每日精讲:⼆叉树的构建及遍历/⼆叉树的前中后序遍历
  • 教人如何做吃的网站wordpress更改主题名
  • 网站和网页的区别在于o2o模式举例说明
  • 大概在网上建立一个网站一年要花多少钱呀微商网
  • 做网站服务好福州外贸网站建设推广
  • NAND FLASH与NOR FLASH
  • 有什么好的网站推荐一下私域流量运营
  • 新网站如何做排在前面给卖假性药的做网站一般要判多久
  • 臭氧传感器采用电化学原理测量原理一文浅淡
  • Spring-AI简单实践
  • [优选算法专题三二分查找——NO.18在排序数组中查找元素的第一个和最后一个位置]
  • 智能化住宅防盗报警系统设计(论文+源码)
  • 58同城网站建设案例购买网域名的网站好
  • 创意合肥网站建设网站后台ftp账户
  • 配置文件空密码与明文密码修复方案
  • 对网站开发的理解js做网站登录界面
  • 统计二级域名的网站流量有什么用龙岗公司网站
  • vivado进行zynq开发问题总结
  • 大气金融网站peise网站
  • 计算机网站建设职业群wordpress 批量修改字体