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

加载CNN模型时遇load_state_dict参数缺失错误,求解决方法

解决PyTorch模型加载时的load_state_dict()参数缺失错误

问题根源

你加载模型时的核心错误是没有实例化模型对象,直接用类名ConvNet调用了实例方法load_state_dict()。load_state_dict是PyTorch模型实例的方法,必须在类的实例上调用,而不是类本身。

另外,你的模型定义还有一个隐藏问题:forward方法的缩进错误,它现在定义在ConvNet类外面,这会导致模型无法正常执行前向传播,需要把forward方法缩进,放在ConvNet类内部。

修正步骤

  1. 修正模型定义的缩进问题
    调整forward方法的缩进,使其成为ConvNet类的成员方法,同时修正注释和展平维度的细节:

    class ConvNet(nn.Module):
        def __init__(self):
            super(ConvNet, self).__init__()
            self.conv1 = nn.Conv2d(in_channels=2, out_channels=4, kernel_size=4)
            self.pool = nn.MaxPool2d(2, 2)
            self.conv2 = nn.Conv2d(4, 8, 4)
            self.fc1 = nn.Linear(8 * 6 * 6, 120)
            self.fc2 = nn.Linear(120, 84)
            self.fc3 = nn.Linear(84, 1)
    
        def forward(self, x):
            # -> n, 2, 32, 32(输入通道为2,修正注释错误)
            x = self.pool(F.relu(self.conv1(x)))  
            x = self.pool(F.relu(self.conv2(x)))  
            x = x.flatten(start_dim=1)  # 指定start_dim=1,避免批量维度被展平
            x = F.relu(self.fc1(x))               
            x = F.relu(self.fc2(x))               
            x = self.fc3(x)                      
            return x
    
  2. 修正模型加载代码
    先实例化模型对象,再调用load_state_dict方法:

    import torch
    from src.data import CarBonnetSource
    from src.model import ConvNet
    
    # 1. 实例化模型
    model = ConvNet()
    # 2. 加载预训练权重(若测试环境与训练环境设备不同,需指定map_location)
    # 例:训练用GPU、测试用CPU时,改为torch.load(filepath, map_location=torch.device('cpu'))
    model.load_state_dict(torch.load(filepath))
    # 3. 设置模型为评估模式
    model.eval()
    

额外说明

  • 你保存模型时使用torch.save(model.state_dict(), filepath)是推荐方式,仅保存模型权重,加载时需先实例化对应结构的模型。
  • 若加载时出现设备不匹配错误,务必在torch.load中添加map_location参数指定目标设备。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 11:46:03