You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyTorch文档中‘定义模型类’的含义及加载时类的疑问

PyTorch中“定义模型类”的含义解析

1. 文档中“model class”的具体指代

这里的model class指的是你基于PyTorch的torch.nn.Module基类继承实现的自定义神经网络类,也就是示例代码里的TheModelClass。这类类需要包含你的神经网络结构定义(比如卷积层、全连接层等组件)以及前向传播的逻辑,是模型的“结构蓝图”。

2. 为什么加载模型时必须定义该类

PyTorch保存模型时,默认只保存模型的可学习参数(权重、偏置等数值,对应state_dict),并不会把模型的类结构代码一起存储。因此加载参数前,必须先有和原模型完全一致的类定义,才能创建出结构匹配的模型实例,再将保存的参数加载到实例中。

3. 翻译后的加载示例代码

加载流程:

# 创建模型实例,前提是TheModelClass的定义已存在
model = TheModelClass(*args, **kwargs)
# 加载保存的模型参数
model.load_state_dict(torch.load(PATH))
# 将模型切换为评估模式
model.eval()

4. 模型类定义示例

举个简单的自定义模型类例子,加载时这类定义必须在当前环境中可访问(同文件定义或通过import导入):

import torch.nn as nn
import torch.nn.functional as F

class TheModelClass(nn.Module):
    def __init__(self):
        super().__init__()
        self.conv1 = nn.Conv2d(3, 6, 5)
        self.pool = nn.MaxPool2d(2, 2)
        self.conv2 = nn.Conv2d(6, 16, 5)
        self.fc1 = nn.Linear(16 * 5 * 5, 120)
        self.fc2 = nn.Linear(120, 84)
        self.fc3 = nn.Linear(84, 10)

    def forward(self, x):
        x = self.pool(F.relu(self.conv1(x)))
        x = self.pool(F.relu(self.conv2(x)))
        x = torch.flatten(x, 1)
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        x = self.fc3(x)
        return x

内容的提问来源于stack exchange,提问作者Quantizer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 08:48:21