即使我使用
'shuffle=False'
,图像也会随机化每个时期。
这是创建加载器的代码:
data_set = dset.CIFAR10(root='./data/cifar10', train=True, transform=transform, download=True)
train_loader, test_loader = create_loader_from_data_set(data_set, n_samples, batch_size, num_workers)
def create_loader_from_data_set(data_set, n_samples, batch_size, num_workers, test_size=0.2):
indices = list(range(len(data_set)))
selected_indices = random.sample(indices, n_samples)
train_indices, test_indices = train_test_split(selected_indices, test_size=test_size, random_state=42)
train_sampler = SubsetRandomSampler(train_indices)
test_sampler = SubsetRandomSampler(test_indices)
train_loader = DataLoader(data_set, batch_size=batch_size, num_workers=num_workers, sampler=train_sampler, shuffle=False)
test_loader = DataLoader(data_set, batch_size=batch_size, num_workers=num_workers, sampler=test_sampler, shuffle=False)
return train_loader, test_loader
这是训练循环:
def train_epoch(epoch, network, loader, optimizer, batch_size):
network.train()
for batch_index, sample_tensor in enumerate(loader):
batch_images, _ = sample_tensor
我在每个时期得到不同的图像顺序(也不是相同的批次)。 shuffle=False 不应该保持顺序相同吗?
谢谢!
我也尝试过使用发电机,但它不起作用:
gen = torch.Generator()
train_loader = DataLoader(data_set, batch_size=batch_size, num_workers=num_workers, sampler=train_sampler, generator=gen)
您应该尝试
train_test_split(..., shuffle = False)
,因为此函数的默认值为 True。