内部是否发生 training/validation 分裂,或者是否只有一个训练集和测试集?

Is there a training/validation split happening internally, or is there just one training set and testing set?

所以最近我一直在学习 https://pytorch.org/tutorials/intermediate/torchvision_tutorial.html 中的教程,我想出了以下问题:内部是否发生了 training/validation 分裂?

问题是,在本教程中,主要数据集被拼接到训练和测试中。这里,训练集用于evaluate()函数中的训练和测试。

据我所知,在处理神经网络时,通常将数据分为 3 组:训练、验证和测试。不过在本教程中,它仅分为训练和测试。据我所知,通常先对模型进行训练然后进行评估,然后根据在评估步骤中学到的知识更新权重。但是,我似乎找不到评估功能和培训之间的任何联系。因此,在这个例子中,模型正在使用相同的数据集进行评估和测试。

这里有什么我可能遗漏的吗?训练期间训练数据集是否发生内部拆分(分为训练和验证),函数 evaluate() 仅用于测试模型的性能?

for epoch in range(num_epochs):
        # train for one epoch, printing every 10 iterations
        train_one_epoch(model, optimizer, data_loader, device, epoch, print_freq=10)
        # update the learning rate
        lr_scheduler.step()
        # evaluate on the test dataset
        evaluate(model, data_loader_test, device=device)```

Is there a training/validation split happening internally?

Is there an internal split of the training dataset happening during training (into training and validation) and the function evaluate() is simply used for testing the performance of the model?

不,你没有遗漏任何东西。您所看到的正是那里正在做的事情。 没有发生内部分裂。这只是一个示例,展示了如何在 pytorch 中完成某些事情,而不会使它不必要地混乱。

一些数据集,例如 CIFAR10/CIFAR100,只有 train/test 集,通常 规范 只训练然后评估示例中的测试集。但是,没有什么能阻止您按照自己喜欢的方式拆分训练集,这取决于您。在此类教程中,他们只是试图让一切尽可能简单。