PyTorch中的常见报错总结
NO.1
- 报错:ValueError: num_samples should be a positive integer value, but got
num_samples=0
- 可能的原因:传入的Dataset中的len(self.data_info)==0,即传入该dataloader的dataset里没有数据
- 解决方法:
检查dataset中的路径
,路径不对,读取不到数据- 检查Dataset的__len__()函数为何输出为零
# ========================== 1 num_samples=0
flag = 0
# flag = 1
if flag:
# train_dir = os.path.join("..", "data", "rmb_split", "train")
train_dir = os.path.join("..", "..", "data", "rmb_split", "train")
train_data = RMBDataset(data_dir=train_dir)
# 构建DataLoder
train_loader = DataLoader(dataset=train_data, batch_size=16, shuffle=True)
NO.2
- 报错:TypeError: pic should be PIL Image or ndarray.
Got <class 'torch.Tensor’>
- 可能的原因:当前操作需要PIL Image或ndarray数据类型,但传入了Tensor
- 解决方法:
检查transform中是否存在两次ToTensor()方法
- 检查transform中每一个操作的数据类型变化
# ========================== 2
# TypeError: pic should be PIL Image or ndarray. Got <class 'torch.Tensor'>
flag = 0
# flag = 1
if flag:
train_transform = transforms.Compose([
transforms.Resize((224, 224)),
transforms.FiveCrop(200),
transforms.Lambda(lambda crops: torch.stack([(transforms.ToTensor()(crop)) for crop in crops])),
# transforms.ToTensor(),
# transforms.ToTensor(),
])
train_dir = os.path.join("..", "..", "data", "rmb_split", "train")
train_data = RMBDataset(data_dir=train_dir, transform=train_transform)
train_loader = DataLoader(dataset=train_data, batch_size=16, shuffle=True)
data, label = next(iter(train_loader))
NO.3
- 报错:RuntimeError:
invalid argument 0: Sizes of tensors must match except in dimension 0.
Got 93 and 89 in dimension 1 at /Users/soumith/code/builder/wheel/pytorch- src/aten/src/TH/generic/THTensorMath.cpp:3616 - 可能的原因:dataloader的__getitem__函数中,返回的图片形状不一致,导致无法stack
- 解决方法:
检查__getitem__函数中的操作
# ========================== 3
# RuntimeError: invalid argument 0: Sizes of tensors must match except in dimension 0
flag = 0
# flag = 1
if flag:
class FooDataset(Dataset):
def __init__(self, num_data, data_dir=None, transform=None):
self.foo = data_dir
self.transform = transform
self.num_data = num_data
def __getitem__(self, item):
size = torch<