본문 바로가기

Error and Solve

[에러 해결] RuntimeError: stack expects each tensor to be equal size, but got / resize

반응형

 

RuntimeError: stack expects each tensor to be equal size, but got 

 

  return torch.stack(batch, 0, out=out)
RuntimeError: stack expects each tensor to be equal size, but got [3, 512, 512] at entry 0 and [3, 768, 768] at entry 2

RuntimeError: stack expects each tensor to be equal size, but got 

 

stack에서 모든 tensor size가 동일할 것을 요구했지만 다른 경우가 있을 수 있습니다. 

 

 

 

 

resize를 진행

 

 

class ImagePathDataset(torch.utils.data.Dataset):
    def __init__(self, files, transforms=None):
        self.files = files
        self.transforms = transforms
        # Debug print to verify transforms
        print("Transforms:", self.transforms)
        
    def __getitem__(self, i):
        path = self.files[i]
        img = Image.open(path).convert("RGB")
        # Debug print before transform
        print(f"Before transform - Image {i} size:", img.size)
        if self.transforms is not None:
            img = self.transforms(img)
            # Debug print after transform to verify size
            if isinstance(img, torch.Tensor):
                print(f"After transform - Image {i} shape:", img.shape)
            else:
                print(f"After transform - Image {i} size:", img.size)
        return img
        
        
transforms = TF.Compose([
    TF.Resize((512, 512)),
    TF.ToTensor()
])
dataset = ImagePathDataset(file_path, transforms=transforms)

 

위 코드처럼 transform에 resize를 진행하면 해결됩니다.

 

transforms = TF.Compose([
    TF.Resize((512, 512)),
    TF.ToTensor()
])
dataset = ImagePathDataset(file_path, transforms=transforms)

 

모든 path를 동일하게 만들면 stack 이 모두동일해야 한다는 에러가 해결됩니다. 

 

 

 

 

반응형