错误描述:在PyTorch-1.7.1中运行PyTorch官方ImageNet预训练模型Inception-v3,用以下代码获取输出,然后送入softmax cross-entropy loss中报错:
pred = model(adv) loss = torch.sum(F.cross_entropy(F.softmax(pred, dim=1), y))
AttributeError: 'InceptionOutputs' object has no attribute 'softmax'
报错的原因是Inception-v3的输出类型和一般模型有所不同,是InceptionOutputs类型。查看源码可以发现InceptionOutputs类型是一个namedtuple:
InceptionOutputs = namedtuple('InceptionOutputs', ['logits', 'aux_logits'])
InceptionOutputs.__annotations__ = {'logits': Tensor, 'aux_logits': Optional[Tensor]}
可以发现,InceptionOutputs的logits属性才是我们要的模型logits输出。解决办法是用以下方法引用之:
pred = model(adv) '''if model = inception-v3''' pred = pred.logits loss = torch.sum(F.cross_entropy(F.softmax(pred, dim=1), y))



