RuntimeError: несоответствующие размеры тензора в /pytorch/torch/lib/TH/generic/THTensorMath.c:2864 - PullRequest
0 голосов
/ 21 мая 2018

Я пытаюсь построить загрузчик данных, вот как это выглядит

`class WhaleData(Dataset):
def __init__(self, data_file, root_dir , transform = None):
    self.csv_file = pd.read_csv(data_file)
    self.root_dir = root_dir
    self.transform = transforms.Resize(224)

def __len__(self):
    return len(os.listdir(self.root_dir))

def __getitem__(self, index):
    image = os.path.join(self.root_dir, self.csv_file['Image'][index])
    image = Image.open(image)
    image = self.transform(image)
    image = np.array(image)
    label  = self.csv_file['Image'][index]
    sample = {'image': image, 'label':label}
    return sample

trainset  = WhaleData(data_file = '/mnt/55-91e8-b2383e89165f/Ryan/1234/train.csv', 
     root_dir = '/mnt/4d55-91e8-b2383e89165f/Ryan/1234/train')
train_loader = torch.utils.data.DataLoader(trainset , batch_size = 4, shuffle =True,num_workers= 2)
for i, batch in enumerate(train_loader):
      (i, batch)

Когда я пытаюсь запустить этот блок кода, я получаю эту ошибку, я получаю природу ошибки, что все моиизображения могут не иметь одинаковую форму, и мои изображения не все имеют одинаковую форму, но если я не ошибаюсь, ошибка должна возникать, только когда я передаю их в сеть, потому что все изображения имеют разные формы, но почему это так?выдает ошибку здесь?Любые предложения о том, где я мог ошибиться, будут чрезвычайно полезны, я был бы рад предоставить любую дополнительную информацию, если необходимо,

Спасибо

RuntimeError: Traceback (most recent call last):
  File "/usr/local/lib/python3.5/dist-packages/torch/utils/data/dataloader.py", line 42, in _worker_loop
samples = collate_fn([dataset[i] for i in batch_indices])
  File "/usr/local/lib/python3.5/dist-packages/torch/utils/data/dataloader.py", line 116, in default_collate
    return {key: default_collate([d[key] for d in batch]) for key in batch[0]}
  File "/usr/local/lib/python3.5/dist-packages/torch/utils/data/dataloader.py", line 116, in <dictcomp>
    return {key: default_collate([d[key] for d in batch]) for key in batch[0]}
  File "/usr/local/lib/python3.5/dist-packages/torch/utils/data/dataloader.py", line 105, in default_collate
return torch.stack([torch.from_numpy(b) for b in batch], 0)
  File "/usr/local/lib/python3.5/dist-packages/torch/functional.py", line 64, in stack
    return torch.cat(inputs, dim)
RuntimeError: inconsistent tensor sizes at /pytorch/torch/lib/TH/generic    /THTensorMath.c:2864

1 Ответ

0 голосов
/ 21 мая 2018

Ошибка появляется, когда PyTorch пытается объединить изображения в единый пакетный тензор (см. torch.stack([torch.from_numpy(b) for b in batch], 0) из вашей трассировки).Как вы упомянули, поскольку изображения имеют различную форму, укладка не выполняется (т. Е. Тензор (B, H, W) может быть создан только путем суммирования B тензоров, если все эти тензоры имеют форму (H, W)).


Примечание: я не совсем уверен, но установка batch_size=1 для torch.utils.data.DataLoader(...) может удалить эту конкретную ошибку, так как, вероятно, больше не нужно будет вызывать torch.stack()).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...