提问人:JIAZHENG HU 提问时间:11/13/2023 更新时间:11/13/2023 访问量:7
遍历 Dataloader 时卡住
Stuck while iterate through Dataloader
问:
我正在尝试创建一个包含 10000 个样本(8000 个用于训练,2000 个用于验证)的 3D 测试数据集来测试我的 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)
这意味着我们确实有两个数据加载器的长度信息。无法弄清楚为什么我在通过数据加载器迭代时遇到无限循环问题。
答: 暂无答案
评论