【问题标题】:How do I get rid of this error: max() received an invalid combination of arguments - got (str, int), but expected one of: * (Tensor input)如何摆脱此错误:max() 收到无效的参数组合 - 得到 (str, int),但预期其中之一:*(张量输入)
【发布时间】:2021-10-05 12:32:06
【问题描述】:

我使用 FCN ResNet50 模型对文档图像进行语义分割。我一直在尝试解决这个问题,但到目前为止还没有成功。这是 google colab 上的模型链接:https://colab.research.google.com/drive/1slJilG1ZBOsk6AqM6AOUaaCxHFSXVMCM?usp=sharing

这是错误:

TypeError: Traceback (most recent call last)
<ipython-input-12-f6d0f244c03c> in <module>()
     13 
     14 model_ft = train_model(final_model, train_dl, criterion, optimizer_ft, exp_lr_scheduler,
---> 15                        num_epochs=25)

<ipython-input-11-683ce68860de> in train_model(model, dataloaders, criterion, optimizer, scheduler, num_epochs)
     31                 with torch.set_grad_enabled(phase == 'train'):
     32                     outputs, aux = model(inputs.float())
---> 33                     _, preds = torch.max(outputs, 1)
     34                     loss = criterion(outputs, labels)
     35 

TypeError: max() received an invalid combination of arguments - got (str, int), but expected one of:
 * (Tensor input)
 * (Tensor input, Tensor other, *, Tensor out)
 * (Tensor input, int dim, bool keepdim, *, tuple of Tensors out)
 * (Tensor input, name dim, bool keepdim, *, tuple of Tensors out)

【问题讨论】:

标签: python machine-learning computer-vision pytorch resnet


【解决方案1】:

在torchvision 中附加预训练的分割模型

model(inputs.float())

返回一个字典,而不是一个数组。因此,您传递给 max 的是该字典中的一组键(因为字典在迭代时被视为键的集合,在这种情况下恰好是字符串)。只需从您的模型中读取正确的密钥。确切的密钥取决于您加载的模型。

outputs_dict = model(inputs.float())
print(outputs_dict.keys())

看着https://github.com/pytorch/vision/blob/master/torchvision/models/segmentation/_utils.py

我希望键被称为“out”,辅助输出被放置在“aux”中。

【讨论】:

  • 我对代码进行了以下更改:第 1 行-> outputs = outputs_dict["out"] 第 2-> _, preds = torch.argmax(outputs, 1) 但现在如下发生错误:要解包的值太多(预期为 2)。请帮忙
  • 关于 SO 的问题不是调试线程。一个问题应该提出一个具体的问题,而答案就是解决它。如果您有新问题,您应该提出一个新问题,以便其他遇到它的人可以跟踪和查看。
  • 解包问题是因为argmax应该输出一个值,你为什么要做_, preds = torch.argmax(outputs, 1)?它应该只是 preds = torch.argmax(outputs, 1)
猜你喜欢
  • 2020-06-04
  • 2021-08-10
  • 1970-01-01
  • 2020-07-21
  • 2022-01-25
  • 1970-01-01
  • 1970-01-01
  • 2021-06-17
  • 2019-05-22
相关资源
最近更新 更多