Python 如何在每次培训中以相同的顺序处理加载程序中的数据集
我想知道如何处理我的数据加载器中的索引,每次训练都是以相同的顺序进行的。我之所以想这样做,是因为我的代码在验证集上保存结果的可视化输出需要很多时间,所以我决定只保存在验证集上看到的前N个示例 但是,当我在验证循环中通过所有批次时:Python 如何在每次培训中以相同的顺序处理加载程序中的数据集,python,dataset,pytorch,training-data,dataloader,Python,Dataset,Pytorch,Training Data,Dataloader,我想知道如何处理我的数据加载器中的索引,每次训练都是以相同的顺序进行的。我之所以想这样做,是因为我的代码在验证集上保存结果的可视化输出需要很多时间,所以我决定只保存在验证集上看到的前N个示例 但是,当我在验证循环中通过所有批次时: for t, (x, y, indices) in enumerate(dataset['loader_val']) x = x.to(device=device, dtype=dtype) # move to device, e.g. GPU y = y
for t, (x, y, indices) in enumerate(dataset['loader_val'])
x = x.to(device=device, dtype=dtype) # move to device, e.g. GPU
y = y.to(device=device, dtype=dtype) # move to device, e.g. GPU
# Obtaining the scores ... -------------------------------------------------------------------
scores = model(x)
......
例如,我的
索引值在第一次迭代时并不总是相同的。自从我在数据集['loader\u val']上检查后,我确信我的验证集始终具有相同的索引。sampler.index
始终是相同的数组,并且以相同的方式排序。是否有一种方法可以让enumerate()
始终以相同的方式获取数据集['loader\u val']
中的索引?检查修复随机种子是否有助于导入;火炬。手动种子(0)
。您可以查看再现性指南以了解更多详细信息:您的验证加载程序是否具有shuffle=True
?谢谢。。这很有效。。只需在for循环之前执行火炬。手动_seed(0)
,以便始终具有相同的种子。谢谢你的回复。