MNIST是一个手写数字图像数据集,包含了 60,000 个训练样本和 10,000 个测试样本。这些图像都是黑白图像,大小为 28 × \times × 28 像素,每个像素点的值为 0 到 255 之间的灰度值,表示图像亮度的变化。
这个数据集主要被用于测试机器学习算法和模型的性能,尤其是在图像分类任务上。它通常被用作入门级别的图像分类问题的基准数据集,因为它相对简单并且容易使用。
MNIST数据集包含数字 0 到 9 的手写数字,每个数字有 6000 个样本,这些样本是从不同人的手写数字中随机采样而来的。由于数据集的小规模和相对简单的图像,MNIST已经成为了机器学习领域的经典数据集之一。
在我们导入数据时,经常会这样操作:
train_loader = torch.utils.data.DataLoader(torchvision.datasets.MNIST('./data/', train = True, download = True,
transform = torchvision.transforms.Compose([
torchvision.transforms.ToTensor(),
torchvision.transforms.Normalize(
(0.1307, ), (0.3081, ))])), batch_size = batch_size_train, shuffle = True)
test_loader = torch.utils.data.DataLoader(torchvision.datasets.MNIST('./data/', train = False, download = True,
transform = torchvision.transforms.Compose([
torchvision.transforms.ToTensor(),
torchvision.transforms.Normalize(
(0.1307, ), (0.3081, ))])), batch_size = batch_size_test, shuffle = True)
这段代码是用来创建train_loader和test_loader的。
train_loader和test_loader是PyTorch中的DataLoader
对象,用来将数据集按照batch_size分批加载,每个batch_size大小的数据被视为一个batch,用来进行模型训练和测试。
在这里,MNIST数据集被用来创建这两个DataLoader对象,train=True
表示创建用于训练的数据集,train=False
表示创建用于测试的数据集,batch_size_train
和batch_size_test
分别表示训练集和测试集的batch size。transform
参数是一个用来对数据进行预处理的PyTorch的Transform
对象,这里使用了ToTensor()
和Normalize()
两个变换,将图片转换成张量,并进行标准化。
batch_size
是指一次迭代训练所使用的样本数,它是深度学习中非常重要的一个超参数。
在训练过程中,通常将所有训练数据分成若干个batch,每个batch包含若干个样本,模型会依次使用每个batch的样本进行参数更新。通过使用batch_size可以在训练时有效地降低模型训练所需要的内存,同时可以加速模型的训练过程。
通常情况下,batch_size的值越大,训练时使用的内存就越多,但是模型的收敛速度会加快,对于深度学习中较大的数据集,较大的batch_size可以提高训练速度,但可能会降低模型的准确率。
相反,batch_size的值越小,训练时使用的内存就越少,但是模型的收敛速度会变慢,同时可能会提高模型的准确率。因此,我们需要根据数据集的大小、模型的复杂度和计算资源的限制等因素综合考虑选择一个合适的batch_size。
对于MNIST数据集,batch_size_train可以设置为32、64、128等。具体选择哪一个需要根据模型的复杂度和显存大小等因素来考虑。如果模型较简单,显存较小,可以选择较小的batch size;如果模型较复杂,显存较大,可以适当增大batch size以提高训练效率。通常来说,较大的batch size可以带来更稳定的梯度估计,有助于加速训练。
在MNIST数据集中,测试集的图像数量为10000张,为了保证测试的准确性,一般建议将 batch_size_test 设为1000,这样测试集中的图像可以被分成10个批次来进行测试,以避免由于内存不足而无法完成测试的问题。