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

PyTorch可训练参数计算异常:EfficientNet-B7参数统计不符

问题原因及解决方法

核心问题

直接修改model.classifier[-1].out_features不会改变线性层的实际参数形状。PyTorch中nn.Linear的out_features只是一个属性标记,修改它不会自动重新初始化权重和偏置张量,原分类层的参数依然是针对1000类任务的(权重形状为(2560, 1000),偏置为(1000)),所以可训练参数数量还是(2560+1)*1000=2561000。

正确修改方式

需要直接替换最后一层线性层,重新创建对应4分类的参数:

from torch import nn
from torchsummary import summary
from torchvision import models

model = models.efficientnet_b7(pretrained=True)
# 替换最后一层线性层,指定输入特征数和4个输出类别
model.classifier[-1] = nn.Linear(model.classifier[-1].in_features, 4)
# 添加Softmax层
model.classifier = nn.Sequential(*model.classifier, nn.Softmax(dim=1))

# 冻结特征层
for child in model.features:
    for param in child.parameters():
        param.requires_grad = False

验证修改效果

执行以下代码可以确认可训练参数数量:

trainable_params = sum(p.numel() for p in model.parameters() if p.requires_grad)
print(trainable_params)  # 输出应为10244

此时summary(model, (3,128,128))也会显示分类层的输出为4,可训练参数数量正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 23:51:19