Fashion MNIST数据集介绍及基于Pytorch下载数据集
Fashion MNIST是深度学习和机器学习领域中一个非常流行且实用的数据集。它为初学者和研究者提供了一个挑战性的任务,以磨练他们的图像分类技能。本文将深入探讨Fashion MNIST数据集的背景、目的、使用方法和示例代码,帮助您更好地了解如何利用这个数据集进行图像分类任务。
Fashion MNIST是一个包含10个类别的服饰分类数据集,每个类别有7000个28x28像素的灰度图像。与MNIST数据集相比,Fashion MNIST在图像质量和多样性方面具有更高的挑战性,因为它包含了更多的背景和不同的视角。
标签 | 说明 |
---|---|
0 | T恤(T-shirt) |
1 | 裤子(Trouser) |
2 | 套头衫(Pullover) |
3 | 连衣裙(Dress) |
4 | 外套(Coat) |
5 | 凉鞋(Sandal) |
6 | 衬衫(Shirt) |
7 | 运动鞋(Sneaker) |
8 | 包(Bag) |
9 | 靴子(Ankle boot) |
在开始使用Fashion MNIST数据集之前,您需要先将其下载到本地计算机上。以下是使用Python和Pytorch库下载数据集的步骤:
import torch
from torchvision import datasets, transforms
train_data = torchvision.datasets.FashionMNIST(root='./data', train=True, transform=transforms.ToTensor(), download=True)
这将在当前目录下创建一个名为“data”的文件夹,并将训练数据集下载到其中。如果您已经拥有数据集,并且想要跳过下载过程,请将download
参数设置为False
。
test_data = torchvision.datasets.FashionMNIST(root='./data', train=False, transform=transforms.ToTensor(), download=True)
同样,这将在“data”文件夹中提供测试数据集。
from torch.utils.data import DataLoader
train_loader = DataLoader(train_data, batch_size=32, shuffle=True)
这里,我们将批量大小设置为32,并启用了随机打乱功能。您可以根据需要调整这些参数。类似地,您可以为测试数据集创建一个加载器:
test_loader = DataLoader(test_data, batch_size=32, shuffle=False)
一旦您下载并准备好了数据集,就可以开始构建和训练图像分类模型了。以下是一个使用PyTorch构建简单卷积神经网络(CNN)进行图像分类的示例代码:
import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import DataLoader, TensorDataset
from sklearn.model_selection import train_test_split
首先,我们需要将Fashion MNIST数据集划分为训练集和测试集。以下是一个简单的示例代码,用于将数据分为训练集和测试集:
# 将数据转换为Tensor格式并进行归一化处理(将像素值缩放到0-1之间)
transform = transforms.ToTensor()
train_data = TensorDataset(torch.tensor(train_data.data), train_data.targets) # targets表示图像对应的类别标签(0-9)
test_data = TensorDataset(torch.tensor(test_data.data), test_data.targets) # targets表示图像对应的类别标签(0-9)
train_loader = DataLoader(train_data, batch_size=32, shuffle=True) # 创建训练数据加载器,设置批量大小为32并【启用】随机打乱功能
test_loader = DataLoader(test_data, batch_size=32, shuffle=False) # 创建测试数据加载器,设置批量大小为32并【禁用】随机打乱功能
3. 定义模型结构:
现在,我们可以定义一个简单的卷积神经网络(CNN)模型,用于图像分类任务。以下是一个示例代码,展示了如何使用PyTorch构建一个包含两个卷积层、一个全连接层的CNN模型:
```python
class SimpleCNN(nn.Module):
def __init__(self):
super(SimpleCNN, self).__init__()
self.conv1 = nn.Conv2d(1, 32, kernel_size=3, stride=1, padding=1)
self.conv2 = nn.Conv2d(32, 64, kernel_size=3, stride=1, padding=1)
self.fc1 = nn.Linear(64 * 7 * 7, 128)
self.fc2 = nn.Linear(128, 10)
def forward(self, x):
x = F.relu(self.conv1(x))
x = F.relu(self.conv2(x))
x = x.view(-1, 64 * 7 * 7) # 将卷积后的特征图展平,以便输入全连接层
x = F.relu(self.fc1(x))
x = self.fc2(x)
return F.log_softmax(x, dim=1) # 使用log_softmax激活函数进行分类概率计算
接下来,我们将使用训练数据集对模型进行训练。以下是一个示例代码,展示了如何定义损失函数和优化器,以及如何训练模型:
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') # 检查是否有可用的GPU,并定义设备(CPU或GPU)
model = SimpleCNN().to(device) # 将模型移动到设备上(CPU或GPU)
criterion = nn.CrossEntropyLoss() # 定义损失函数为交叉熵损失函数
optimizer = optim.SGD(model.parameters(), lr=0.001, momentum=0.9) # 定义优化器为随机梯度下降(SGD)优化器,设置学习率为0.001,动量为0.9
# 训练模型
num_epochs = 10 # 设置训练轮数为10轮
for epoch in range(num_epochs):
model.train() # 设置模型为训练模式
running_loss = 0.0
for i, data in enumerate(train_loader): # 使用训练数据加载器逐批获取数据和标签
inputs, labels = data[0].to(device), data[1].to(device) # 将数据和标签移动到设备上(CPU或GPU)
optimizer.zero_grad() # 将梯度清零
outputs = model(inputs) # 前向传播,获取预测输出
loss = criterion(outputs, labels) # 计算损失值
loss.backward() # 反向传播,计算梯度值
optimizer.step() # 更新权重参数
running_loss += loss.item() # 累加损失值
print('Epoch %d loss: %.3f' % (epoch + 1, running_loss / len(train_loader))) # 输出当前轮次的平均损失值
经过训练后,我们需要使用测试数据集评估模型的性能。以下是一个示例代码,展示了如何使用测试数据加载器评估模型:
model.eval() # 设置模型为评估模式,关闭dropout和batch normalization等在训练模式下的特殊操作
correct = 0
total = 0
with torch.no_grad(): # 不需要计算梯度,以提高评估速度
for data in test_loader: # 使用测试数据加载器逐批获取数据和标签
images, labels = data[0].to(device), data[1].to(device) # 将数据和标签移动到设备上(CPU或GPU)
outputs = model(images) # 前向传播,获取预测输出
_, predicted = torch.max(outputs.data, 1) # 获取最大概率对应的类别标签作为预测结果
total += labels.size(0) # 统计样本总数
correct += (predicted == labels).sum().item() # 统计正确分类的样本数量
print('Accuracy of the network on the test images: %d %%' % (
100 * correct / total)) # 输出模型在测试数据集上的准确率
Fashion MNIST是一个流行的机器学习数据集,主要用于服饰分类任务。它包含10个类别的7000个28x28像素的灰度图像,挑战性较高,因为涉及更多背景和视角。通过PyTorch,可以轻松下载并使用此数据集。一旦数据集准备好,可以使用CNN等模型进行图像分类。本文详细介绍了Fashion MNIST的背景、目的、使用方法和示例代码,为初学者和研究者提供了实用的指导和资源。
亲爱的读者,首先感谢您抽出宝贵的时间来阅读我们的博客。我们真诚地欢迎您留下评论和意见。
俗话说,当局者迷,旁观者清。您的客观视角对于我们发现博文的不足、提升内容质量起着不可替代的作用。
如果博文给您带来了些许帮助,那么,希望您能为我们点个免费的赞/收藏,您的支持和鼓励是我们持续创作✍️✍️的动力。
我们会持续努力创作✍️✍️,并不断优化博文质量,只为给您带来更佳的阅读体验。
如果您有任何疑问或建议,请随时在评论区留言,我们将竭诚为你解答~
愿我们共同成长,共享智慧的果实!
万分感谢您的点赞、收藏⭐、评论️、关注❤️~