遍历 Dataloader 时卡住

Stuck while iterate through Dataloader

提问人:JIAZHENG HU 提问时间:11/13/2023 更新时间:11/13/2023 访问量:7

问:

我正在尝试创建一个包含 10000 个样本(8000 个用于训练,2000 个用于验证)的 3D 测试数据集来测试我的 3D CNN 模型。看起来一切正常,直到我尝试查看我使用的第一批数据。更具体地说,我似乎遇到了一个无限循环,即内核永不停止。Train_dataloadernext(iter(Train_dataloader))

这是我的自定义数据集以及我如何将它们放入 和 :Train_dataloaderTest_dataloader

class Binary3DDataset(Dataset):
    def __init__(self, data,transform=None):
        self.data = data
        self.transform = transform

    def __len__(self):
        return len(self.data)

    def __getitem__(self, idx):
        sample = self.data[idx]
        sample =self.transform(sample)
        return sample
 

# Define data augmentation
data_transform = transforms.Compose([
    transforms.RandomHorizontalFlip(),
    transforms.RandomAffine(degrees = 15, translate = (0.1,0.1)),
    transforms.ToTensor(),
])

# create 10000 random 3D sample with dimension [1, 32,32,32] "[#of channel, depth, height,width]"
num_samples = 10000  
voxel_sample = np.random.choice([0, 1], size=(10000,1,32,32,32), p=[0.7, 0.3])

# Create an instance of custom dataset with data augmentation
augumented_custom_dataset = Binary3DDataset(voxel_sample,transform = data_transform)

# Create train and test dataloader to iterate over the augmented data
batch_size = 32
train_dataset, test_dataset = random_split(augumented_custom_dataset, [8000,2000])

Train_dataloader = DataLoader(train_dataset, batch_size = batch_size, shuffle = True,num_workers=1)
Test_dataloader = DataLoader(test_dataset,batch_size = batch_size, shuffle = False,num_workers=1)

当我尝试使用以下 python 和函数对第一个数据点进行迭代和采样时,它似乎进入了无限循环类型的场景......Train_dataloaderiternext

# Get one batch from the train_dataloader
data_iter = iter(Train_dataloader)
inputs = next(data_iter)

我尝试直接输出 和 的长度。这没有问题。只有当我尝试遍历数据加载器时,才会出现问题。Train_dataloaderTest_dataloader

len(train_dataset),len(test_dataset),len(Train_dataloader),len(Test_dataloader)

输出:

(8000, 2000, 250, 63)

这意味着我们确实有两个数据加载器的长度信息。无法弄清楚为什么我在通过数据加载器迭代时遇到无限循环问题。

无限循环 pytorch-dataloader

评论


答: 暂无答案