我完全理解如何使用与测试集分开的训练集。
我也理解为什么你会打乱训练集中的批次来计算小批量的梯度。
但是,pyTorch教程中提到的广告,我不明白为什么你会使用测试集的洗牌,如下所示:
test_dataloader = DataLoader(test_data, batch_size=64, shuffle=True)
在什么情况下有用?
大多数情况下不需要,因为您不更新权重。
很难举出一个例子,但依赖于批次的统计数据可能就是一个 - 例如各批次的平均准确度。
不过,我从未见过这样的事情,有人可能会争辩(我同意)洗牌测试数据集会引入不必要的随机性(如果有的话),并使历元之间的比较不太可靠(在上面的示例中)。
由于批量统计,我对测试集进行了洗牌。我正在计算每批的roc_auc_score。我正在做一个二元分类任务,正例和负例是从磁盘上的不同位置加载的。因此,在查看类时,生成的文件列表类似于
[0,0,0,1,1,1]
。如果不进行洗牌,则可能会发生批次中只有一个类并且批量分数计算失败的情况。因此,我对其进行了洗牌,但收到警告,强烈建议不要这样做。事实上,每当我在测试集上重新运行模型时,我都会观察到汇总统计数据的随机性。感谢第一张海报,我想我现在知道原因了。