Fashion MNIST数据集介绍及基于Pytorch下载数据集

Fashion MNIST数据集介绍及基于Pytorch下载数据集


文章目录

  • 引言
  • Fashion MNIST数据集简介
    • Fashion MNIST数据集的类别说明
    • Fashion MNIST数据集图片示例
  • 基于PyTorch下载Fashion MNIST数据集
  • 使用Fashion MNIST数据集进行图像分类任务
  • 小结
  • 结尾


引言

Fashion MNIST是深度学习和机器学习领域中一个非常流行且实用的数据集。它为初学者和研究者提供了一个挑战性的任务,以磨练他们的图像分类技能。本文将深入探讨Fashion MNIST数据集的背景、目的、使用方法和示例代码,帮助您更好地了解如何利用这个数据集进行图像分类任务。


Fashion MNIST数据集简介

Fashion MNIST是一个包含10个类别的服饰分类数据集,每个类别有7000个28x28像素的灰度图像。与MNIST数据集相比,Fashion 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数据集图片示例


Fashion MNIST数据集介绍及基于Pytorch下载数据集_第1张图片

图1 数据集示例


基于PyTorch下载Fashion MNIST数据集

在开始使用Fashion MNIST数据集之前,您需要先将其下载到本地计算机上。以下是使用Python和Pytorch库下载数据集的步骤:

  1. 确保已经安装了Python和Pytorch。您可以从Pytorch官网下载并安装最新版本的Pytorch。
  2. 导入所需的库:
import torch
from torchvision import datasets, transforms
  1. 下载训练数据集:
train_data = torchvision.datasets.FashionMNIST(root='./data', train=True, transform=transforms.ToTensor(), download=True)

这将在当前目录下创建一个名为“data”的文件夹,并将训练数据集下载到其中。如果您已经拥有数据集,并且想要跳过下载过程,请将download参数设置为False

  1. 下载测试数据集:
test_data = torchvision.datasets.FashionMNIST(root='./data', train=False, transform=transforms.ToTensor(), download=True)

同样,这将在“data”文件夹中提供测试数据集。

  1. 现在您已经成功下载了Fashion MNIST数据集,您可以使用Pytorch的数据加载器(DataLoader)来轻松加载数据。例如,以下代码将创建一个训练数据加载器:
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)

使用Fashion MNIST数据集进行图像分类任务

一旦您下载并准备好了数据集,就可以开始构建和训练图像分类模型了。以下是一个使用PyTorch构建简单卷积神经网络(CNN)进行图像分类的示例代码:

  1. 导入所需的库和模块:
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
  1. 划分训练和测试数据集:

首先,我们需要将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激活函数进行分类概率计算
  1. 训练模型:

接下来,我们将使用训练数据集对模型进行训练。以下是一个示例代码,展示了如何定义损失函数和优化器,以及如何训练模型:

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))) # 输出当前轮次的平均损失值
  1. 测试模型:

经过训练后,我们需要使用测试数据集评估模型的性能。以下是一个示例代码,展示了如何使用测试数据加载器评估模型:

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的背景、目的、使用方法和示例代码,为初学者和研究者提供了实用的指导和资源。


结尾

亲爱的读者,首先感谢抽出宝贵的时间来阅读我们的博客。我们真诚地欢迎您留下评论和意见
俗话说,当局者迷,旁观者清。的客观视角对于我们发现博文的不足、提升内容质量起着不可替代的作用。
如果博文给您带来了些许帮助,那么,希望能为我们点个免费的赞/收藏您的支持和鼓励是我们持续创作✍️✍️的动力
我们会持续努力创作✍️✍️,并不断优化博文质量‍‍,只为给带来更佳的阅读体验。
如果有任何疑问或建议,请随时在评论区留言,我们将竭诚为你解答~
愿我们共同成长,共享智慧的果实!


万分感谢点赞收藏⭐、评论️、关注❤️~

你可能感兴趣的:(PyTorch,pytorch,人工智能,python)