【问题标题】:TypeError: __array__() takes 1 positional argument but 2 were givenTypeError: __array__() 接受 1 个位置参数,但给出了 2 个
【发布时间】:2021-09-13 14:54:03
【问题描述】:

我一直在学习 pytorch 教程 (https://pytorch.org/tutorials/intermediate/torchvision_tutorial.html) 并且遇到了这个我不知道如何解决的错误。完整的错误如下:

Traceback (most recent call last):
  File "main.py", line 146, in <module>
    main()
  File "main.py", line 138, in main
    train_one_epoch(model, optimizer, data_loader, device, epoch, print_freq=10)
  File "/engine.py", line 26, in train_one_epoch
    for images, targets in metric_logger.log_every(data_loader, print_freq, header):
  File "/utils.py", line 180, in log_every
    for obj in iterable:
  File "/usr/local/lib/python3.6/dist-packages/torch/utils/data/dataloader.py", line 521, in __next__
    data = self._next_data()
  File "/usr/local/lib/python3.6/dist-packages/torch/utils/data/dataloader.py", line 1203, in _next_data
    return self._process_data(data)
  File "/usr/local/lib/python3.6/dist-packages/torch/utils/data/dataloader.py", line 1229, in _process_data
    data.reraise()
  File "/usr/local/lib/python3.6/dist-packages/torch/_utils.py", line 425, in reraise
    raise self.exc_type(msg)
TypeError: Caught TypeError in DataLoader worker process 0.
Original Traceback (most recent call last):
  File "/usr/local/lib/python3.6/dist-packages/torch/utils/data/_utils/worker.py", line 287, in _worker_loop
    data = fetcher.fetch(index)
  File "/usr/local/lib/python3.6/dist-packages/torch/utils/data/_utils/fetch.py", line 44, in fetch
    data = [self.dataset[idx] for idx in possibly_batched_index]
  File "/usr/local/lib/python3.6/dist-packages/torch/utils/data/_utils/fetch.py", line 44, in <listcomp>
    data = [self.dataset[idx] for idx in possibly_batched_index]
  File "/usr/local/lib/python3.6/dist-packages/torch/utils/data/dataset.py", line 311, in __getitem__
    return self.dataset[self.indices[idx]]
  File "main.py", line 64, in __getitem__
    img, target = self.transforms(img, target)
  File "/transforms.py", line 26, in __call__
    image, target = t(image, target)
  File "/usr/local/lib/python3.6/dist-packages/torch/nn/modules/module.py", line 1051, in _call_impl
    return forward_call(*input, **kwargs)
  File "/transforms.py", line 50, in forward
    image = F.to_tensor(image)
  File "/usr/local/lib/python3.6/dist-packages/torchvision/transforms/functional.py", line 129, in to_tensor
    np.array(pic, mode_to_nptype.get(pic.mode, np.uint8), copy=True)
TypeError: __array__() takes 1 positional argument but 2 were given

我相信这意味着我在某个地方使用了一个不允许使用的带有 2 个参数的数组,但我真的不知道发生在哪里 - 也许在他们的一个预先编写的库中?

如果需要,我可以完整地共享代码,但认为它有点笨拙。有谁知道可能导致此错误的原因?

【问题讨论】:

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


    【解决方案1】:

    也可以通过将 Pillow 从版本 8.3.0 升级到 8.3.1 来解决此问题。我遇到了同样的问题

    torch==1.9.0+cu111
    torchvision==0.10.0+cu111
    Pillow==8.3.0
    

    Pillow 升级到 8.3.1 后(torch 和torchvision 不变)如下,问题消失了:

    pip install --upgrade pillow
    

    感谢 DRTorresRuiz 提供有关 Pillow 的线索。

    【讨论】:

    • 谢谢!为什么它昨天起作用我不知道,但这解决了它。
    【解决方案2】:

    更改您的代码:

    np.array(pic ,np.float32)

    到:

    np.array(pic).astype('float32')

    【讨论】:

      【解决方案3】:

      PyTorch 已经考虑过这个issue。这似乎不是 PyTorch 的问题。

      正如问题中提到的xwang233,我们可以通过降级枕头来修复它:

      pip install pillow==8.2.0
      

      【讨论】:

        【解决方案4】:

        我在使用时遇到了同样的错误:

        torch==1.9.0
        torchvision==0.10.0
        

        在我的 requirements.txt 文件中,我降级了 torch 库,这迫使我降级了 torchvision,并为我修复了错误。我最终使用的没有引发错误的库版本是:

        torch==1.8.1
        torchvision==0.9.1
        

        【讨论】:

        • 非常感谢!这解决了它 - 您或其他任何人知道为什么会出现这种情况吗?
        • 对不起,我不知道。
        猜你喜欢
        • 1970-01-01
        • 2021-09-15
        • 2021-09-27
        • 2017-01-12
        • 2017-04-22
        • 2019-07-07
        相关资源
        最近更新 更多