Pytorch调用预训练模型输出结果时报错argument ‘input‘ (position 1) must be Tensor, not collections.OrderedDict
最新推荐文章于 2023-04-25 17:04:28 发布
最新推荐文章于 2023-04-25 17:04:28 发布

在使用pytorch中的 torchvision.models.segmentation.fcn_resnet50 进行获得已经训练好的预训练模型时,所得结果的输出给我提示说 argument 'input' (position 1) must be Tensor, not collections.OrderedDict ,说网络输出的结果是 OrderedDict 而不是 Tensor 。我想看一下这个有序字典的shape,又报错 collections.OrderedDict' object has no attribute 'shape' 。直译过来就是 collections.OrderedDict 对象没有 shape 这一属性,给我整的一脸蒙逼,直接调用的网络输出为什么不是tensor而是一个有序字典呢。

在国内找了好久没找到解决答案,于是就去谷歌上搜了一下找到了解决答案。这个网站( https://www.learnopencv.com/pytorch-for-beginners-semantic-segmentation-using-torchvision/ )提供的教程里有这么一段话

The output of torchvision models is an OrderedDict and not a torch.Tensor
And in during inference (.eval() mode ) the output, which is an OrderedDict just has one key – out. This out key holds the output and it’s corresponding value has the shape of [No x Co x Ho x Wo].

翻译过来就是torchvision模型的输出就是有序字典类型,其中包含了你所要的输出信息,想要读取输出的张量,需要使用 out 这一key进行索引。体现在代码上就很简单

masks_pred = net(imgs)['out']

在后面加个['out']就顺利地work了。

对于分类模型,在建立好模型后,我们想对模型进行评价,常见的指标有混淆矩阵、KS曲线、ROC曲线、AUC面积等。也可以自己定义函数,把模型结果分割成n(100)份,计算top1的准确率、覆盖率。之前阐述了混淆矩阵,本文阐述KS的原理和Python实现实例,其它指标会在后续文章中详尽阐述,敬请期待。本文目录详细介绍KS1.1 什么是KS1.2 理解KS的一个小例子用Python如何计算KS值... 集合,链表,二叉树,迭代器,list接口,collection,ArrayList,LinkedList、Iterator、set、HashSet、TreeSet、Map、HashMap、HashTable、TreeMap 这个错误提示说,在调用dropout函数,第一个参数(位置为1)必须是Tensor类型,而不是字符串类型。 可能是因为您在调用dropout函数,传递的参数类型不是Tensor,而是字符串。您需要检查您的代码,确保dropout函数的参数是正确的Tensor类型。 问题描述:AODNet在计算ssim,需要从test_loader中将测试集清晰的图像和去雾后的图像输入给ssim方法进行计算,从test_loader中加载图像对的原始代码如下: for (img_orig, img_dehaze) in enumerate(test_loader): ssim_test = ssim(img_orig, img_dehaze) Traceback (most recent call last): File "/home/PycharmPro TypeError: dropout(): argument 'input' (position 1) must be Tensor, not str 背景解决方法整体代码参考链接 使用 hugging face 中的 预训练模型 完成文本分类任务的过程中。出现了这个问题。 问题排查的过程中,发现这里定义的 cls_layer() 出现问题。 问题是数据类型错误,因此需要检查pooler_output的数据产生的位置和输出类型 定位位置,寻找pooler_output的输出 这个poo 这里出现类似错误往往是因为,conv2d()函数的第一个参数,需要一个tensor行的数据,然而却赋值成了not后给的类型。 我出现问题的原因是,中间有一个函数缺少返回值,因此会造成NoneType的错误。其余错误类似,只需把送给conv2d()的数据转换成tensor即可; 这里:numpy 和 tensor数据相互转换的方法: 1.numpy->tensor data = torch.tensor(data) 2.tensor->numpy 非训练数据(训练结束后的tensor from torch.autograd import Variable import numpy as np input = Variable(torch.Tensor([[[1, 3, 3, 4, 5, 6, 7], [1...