迭代数据加载器时卡住

问题描述 投票:0回答:1

我正在尝试创建一个包含 10000 个样本的 3D 测试数据集(8000 个用于训练,2000 个用于验证)来测试我的 3D CNN 模型。看起来一切都很好,直到我尝试使用

Train_dataloader
查看我的
next(iter(Train_dataloader))
中的第一批数据。更具体地说,我似乎遇到了无限循环,即内核永远不会停止。

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

Train_dataloader
Test_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_dataloader
iter
函数迭代和采样
next
中的第一个数据点时,似乎进入了无限循环类型的场景...

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

我尝试直接输出

Train_dataloader
Test_dataloader
的长度。没有问题。仅当我尝试迭代数据加载器时,才会出现问题。

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

输出:

(8000, 2000, 250, 63)

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

infinite-loop pytorch-dataloader
1个回答
1
投票

我也有同样的问题。通过从我的代码中删除

num_workers
解决了这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.