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...