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

如何将预训练ResNet50模型集成到自定义PyTorch Model类中?

代码问题解析

当前代码的核心问题

你现在的代码里,虽然初始化了self.model = models.resnet50(pretrained=False),但forward函数完全没调用这个ResNet50模型,等于白定义了这个模块。当前实际运行的是你自己写的小型卷积网络,和ResNet50没有任何关联。

是否要启用注释行#x = self.model(x)?

这完全取决于你的需求:

  • 如果想基于ResNet50做迁移学习:必须启用这行代码,同时要修改ResNet50的全连接层适配你的分类任务,而不是保留现在的自定义卷积和全连接层。示例修改如下:
    class ResNet(nn.Module):
        def __init__(self, args):
            super(ResNet, self).__init__()
            # 新版PyTorch推荐用weights参数替代pretrained
            self.model = models.resnet50(weights=models.ResNet50_Weights.DEFAULT)
            # 可选:冻结ResNet50的特征提取层,只训练新的全连接层
            for param in self.model.parameters():
                param.requires_grad = False
            # 替换最后一层全连接层,适配你的分类类别数
            num_ftrs = self.model.fc.in_features
            self.model.fc = nn.Linear(num_ftrs, args.num_classes)
    
        def forward(self, x):
            x = self.model(x)
            return x
    
  • 如果想把ResNet50作为自定义网络的一部分:比如先让输入经过ResNet50提取特征,再走你自己的网络层,那需要启用这行代码,但要注意维度匹配——ResNet50默认输出是2048维特征,不能直接接你的conv1(它需要3通道的图像输入),得先处理特征维度。
  • 如果根本不需要用ResNet50:直接删掉self.model = models.resnet50(pretrained=False)这行,你现在的自定义卷积网络是可以运行的(前提是输入图片尺寸符合计算逻辑:比如输入224×224的图片,经过两次卷积+池化后,尺寸刚好是53×53,和你全连接层的输入维度匹配)。

额外提醒

新版PyTorch里pretrained参数已经被弃用,推荐用weights=models.ResNet50_Weights.NONE(不加载预训练权重)或models.ResNet50_Weights.DEFAULT(加载预训练权重)来替代。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 23:27:16