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

基于PyTorch将预训练ResNet50替换MNIST自定义网络适配(200,200,3)输入

替换MNIST自定义网络为预训练ResNet50的代码修改方案

1. 核心模型修改

ResNet50预训练模型默认适配ImageNet 1000分类任务,而MNIST是10分类任务,因此只需替换模型的最后全连接层即可。你的输入尺寸(200,200,3)完全符合ResNet的输入要求(ResNet支持任意大于32×32的RGB图像,内部自适应池化会处理尺寸差异),无需修改前面的卷积层结构。

代码示例:

import torch
import torch.nn as nn
import torchvision.models as models

# 加载预训练ResNet50
model = models.resnet50(pretrained=True)

# 获取原全连接层的输入特征维度
num_input_features = model.fc.in_features

# 替换为10分类的全连接层
model.fc = nn.Linear(num_input_features, 10)

2. 数据输入适配(针对MNIST数据集)

MNIST原始数据是单通道灰度图,而ResNet要求3通道RGB输入,因此需要在数据预处理阶段添加通道转换:

from torchvision import transforms, datasets

# 定义数据变换流程
transform = transforms.Compose([
    transforms.Resize((200, 200)),  # 将图像调整为目标输入尺寸
    transforms.Grayscale(num_output_channels=3),  # 单通道转3通道
    transforms.ToTensor(),
    # 使用ResNet预训练对应的归一化参数
    transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])

# 加载处理后的MNIST数据集
train_dataset = datasets.MNIST(root='./data', train=True, download=True, transform=transform)
test_dataset = datasets.MNIST(root='./data', train=False, download=True, transform=transform)

如果你的输入本身就是(200,200,3)的RGB图像,只需保留Resize(若原始尺寸不符)和归一化步骤,移除Grayscale转换即可。

3. 训练策略调整

  • 冻结预训练层(仅训练新层):若想快速收敛,可先冻结ResNet的预训练参数,只训练替换后的全连接层:
    # 冻结所有预训练层参数
    for param in model.parameters():
        param.requires_grad = False
    
    # 解冻最后全连接层的参数,允许训练
    for param in model.fc.parameters():
        param.requires_grad = True
    
  • 微调整个网络:若追求更好性能,可解冻所有参数,使用较小的学习率(如1e-4)进行全网络微调,注意此时会增加训练时长和显存占用。

训练循环部分可直接复用原自定义网络的代码,只需将模型实例替换为上述修改后的ResNet50即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 21:21:46