【问题标题】:PyTorch TypeError: 'ToTensor' object is not iterablePyTorch TypeError:“ToTensor”对象不可迭代
【发布时间】:2020-10-28 05:14:39
【问题描述】:

我试图在每次迭代时打印一个图像名称。但是,我收到一个错误 TypeError: 'ToTensor' object is not iterable。请有人能告诉我我要去哪里拧吗?非常感谢

from torchvision import datasets
import torch.utils.data
from torch.utils.data import DataLoader
from torchvision import transforms
from dataset2 import CellsDataset
from torchvision import datasets
import torch
import torchvision
import torchvision.transforms as transforms


class ImageFolderWithPaths(datasets.ImageFolder):
    """Custom dataset that includes image file paths. Extends
    torchvision.datasets.ImageFolder
    """

# override the __getitem__ method. this is the method that dataloader calls
def __getitem__(self, index):
    # this is what ImageFolder normally returns 
    original_tuple = super(ImageFolderWithPaths, self).__getitem__(index)
    # the image file path
    path = self.imgs[index][0]
    # make a new tuple that includes original and the path
    tuple_with_path = (original_tuple + (path,))
    return tuple_with_path

# EXAMPLE USAGE:
# instantiate the dataset and dataloader
data_dir = "/Users/nubstech/Documents/GitHub/CellCountingDirectCount/Eddata/"
dataset = ImageFolderWithPaths(data_dir) # our custom dataset
#dataloader = DataLoader(dataset)
transform = transforms.Compose([
    # you can add other transformations in this list
    transforms.ToTensor()
])
dataset = DataLoader(data_dir, transforms.Compose(transforms.ToTensor()))
dataloader = torch.utils.DataLoader(dataset)

# iterate over data
for inputs, labels, paths in dataloader:
    # use the above variables freely
   print(inputs, labels, paths)

回溯消息:

Traceback (most recent call last):
  File "file_location2.py", line 37, in <module>
    dataset = DataLoader(data_dir, transforms.Compose(transforms.ToTensor()))
  File "/Users/nubstech/opt/anaconda3/envs/Cells_Counting/lib/python3.7/site-packages/torch/utils/data/dataloader.py", line 219, in __init__
    batch_sampler = BatchSampler(sampler, batch_size, drop_last)
  File "/Users/nubstech/opt/anaconda3/envs/Cells_Counting/lib/python3.7/site-packages/torch/utils/data/sampler.py", line 190, in __init__
    "but got batch_size={}".format(batch_size))
  File "/Users/nubstech/opt/anaconda3/envs/Cells_Counting/lib/python3.7/site-packages/torchvision/transforms/transforms.py", line 66, in __repr__
    for t in self.transforms:
TypeError: 'ToTensor' object is not iterable

【问题讨论】:

    标签: python python-3.x pytorch


    【解决方案1】:

    这是因为transforms.Compose() 需要是一个列表(可能也接受其他一些可迭代对象)。问题出在这里:

    dataset = DataLoader(data_dir, transforms.Compose(transforms.ToTensor()))
    

    试试:

    transforms = transforms.Compose([transforms.ToTensor()])
    

    这将创建一个可调用对象,您可以在其中传递数据。

    【讨论】:

    • 感谢您的帮助。我现在收到以下跟踪错误: ValueError: batch_size should be a positive integer value, but got batch_size=Compose( ToTensor() )
    • 查看我的编辑。您需要使用您的数据作为参数调用transforms。我不确定你的代码在哪里
    • 我对 PyTorch 还是很陌生 - 请问你有一个实现它的例子吗?
    猜你喜欢
    • 2013-09-01
    • 2017-08-27
    • 2018-10-10
    • 2021-12-13
    • 2019-02-20
    • 2020-03-27
    • 2018-12-12
    • 2018-07-16
    • 2011-09-12
    相关资源
    最近更新 更多