import torchimport torchvision.datasets as dsetsimport torchvision.transforms as transforms#/********** Begin *********/# 下载MNIST数据集Mnist_dataset = dsets.MNIST(root='./data', train=True, transform=transforms.ToTensor(), download=True)# 创建batch_size=100, shuffle=True的DataLoader类型的变量data_loaderdata_loader = torch.utils.data.DataLoader(dataset=Mnist_dataset, batch_size=100, shuffle=True)#输出 data_loader中数据类型print(type(data_loader.dataset))#/********** End *********/
时间: 2025-05-26 12:23:29 浏览: 19
### 加载和处理MNIST数据集
`torchvision.datasets.MNIST` 是 PyTorch 中用于加载 MNIST 手写数字数据集的一个类。通过 `torch.utils.data.DataLoader` 可以方便地将数据分批并提供迭代功能[^1]。
#### 创建 MNIST 数据集实例
以下是创建 MNIST 数据集的代码示例:
```python
from torchvision import datasets, transforms
from torch.utils.data import DataLoader
transform = transforms.Compose([
transforms.ToTensor(), # 将图像转换为张量
transforms.Normalize((0.5,), (0.5,)) # 归一化到 [-1, 1]
])
train_dataset = datasets.MNIST(root='./data', train=True, download=True, transform=transform)
test_dataset = datasets.MNIST(root='./data', train=False, download=True, transform=transform)
```
上述代码中,`transforms.Compose` 定义了一个变换管道,它会依次应用指定的操作。这里使用了两个操作:`ToTensor()` 和 `Normalize()`。前者将 PIL 图像转为 Tensor 类型;后者对输入数据进行了标准化[^2]。
#### 使用 DataLoader 进行批量加载
为了高效训练模型,通常需要将数据分成多个批次(batch)。这可以通过 `DataLoader` 实现:
```python
train_loader = DataLoader(dataset=train_dataset, batch_size=64, shuffle=True)
test_loader = DataLoader(dataset=test_dataset, batch_size=1000, shuffle=False)
```
在这里,`shuffle=True` 表示每次 epoch 开始前都会随机打乱训练样本顺序,而测试集中不需要打乱因此设置为 False[^3]。
#### DataLoader 返回的数据类型
当从 `DataLoader` 获取一批数据时,返回的是一个元组 `(images, labels)`。其中:
- `images`: 是形状为 `[batch_size, channels, height, width]` 的四维张量。对于 MNIST 而言,由于图像是灰度图片,所以通道数为 1 (`channels=1`)。
- `labels`: 是长度等于 `batch_size` 的一维张量,表示每张图片对应的标签值[^4]。
下面是一个简单的循环来展示如何遍历 `DataLoader` 并查看其内容:
```python
for images, labels in train_loader:
print(f'Images shape: {images.shape}') # 输出类似于 'Images shape: torch.Size([64, 1, 28, 28])'
print(f'Labels shape: {labels.shape}') # 输出类似于 'Labels shape: torch.Size([64])'
break # 停止在第一个批次上
```
以上展示了单次迭代中的数据结构形式及其尺寸大小。
阅读全文
相关推荐




