PyTorch中ResNet18模型预测输出维度及含义咨询
PyTorch官方ResNet18输出形状
[64, 1000]的原因及数值含义 形状产生原因
- PyTorch官方实现的ResNet系列模型默认适配ImageNet 1k数据集,该数据集共包含1000个分类类别,因此模型最后一层全连接层的输出维度固定为1000。
- 你设置的batch size为64,输出张量的第一维度对应批大小,因此最终得到
[64, 1000]的输出结果。 - 你观察到的和TensorFlow的输出差异属于框架默认实现的细节区别:部分TensorFlow的ResNet实现会默认适配自定义数据集的类别数调整输出维度,但PyTorch官方实现不会自动修改全连接层参数,需要你手动调整适配你的数据集。
如果你的训练数据集类别数不是1000,可以用如下代码修改ResNet18的最后一层:
import torch import torchvision.models as models resnet18 = models.resnet18(pretrained=False) # 替换N为你的数据集实际分类数 num_ftrs = resnet18.fc.in_features resnet18.fc = torch.nn.Linear(num_ftrs, N)
1000个数值的含义
- 每个样本对应的1000个数值是该样本在ImageNet 1k的1000个分类上的未归一化对数概率(logits),不是归一化后的概率值。
- 你使用的
CrossEntropyLoss()内部已经集成了Softmax计算逻辑,所以训练阶段不需要额外对输出做归一化处理。 - 计算准确率时取argmax是为了获得logits最大值对应的类别索引,也就是模型的预测分类结果,该操作和框架无关,多分类任务下只要输出是logits或者概率分布,都需要通过argmax得到预测标签。
内容的提问来源于stack exchange,提问作者user16573587
相关产品推荐
相关产品推荐

