jsp网站设计,外网npv加速器,上海本市企业查询,秦皇岛住房和城乡建设网官网前言 提醒#xff1a; 文章内容为方便作者自己后日复习与查阅而进行的书写与发布#xff0c;其中引用内容都会使用链接表明出处#xff08;如有侵权问题#xff0c;请及时联系#xff09;。 其中内容多为一次书写#xff0c;缺少检查与订正#xff0c;如有问题或其他拓展…前言 提醒 文章内容为方便作者自己后日复习与查阅而进行的书写与发布其中引用内容都会使用链接表明出处如有侵权问题请及时联系。 其中内容多为一次书写缺少检查与订正如有问题或其他拓展及意见建议欢迎评论区讨论交流。 文章目录 前言CNN介绍数据集介绍FashionMNIST 数据集概述主要特点类别标签目标为什么使用 FashionMNIST图像示例数据加载与预处理下载和加载 FashionMNISTPyTorch 代码示例数据集使用场景 数据集可视化总结 项目实例代码 CNN介绍 可见于 MNIST数据集_CNN 数据集介绍
FashionMNIST 数据集概述
FashionMNIST 是一个包含 10 个类别的图像数据集用于训练和测试机器学习模型特别是在图像分类任务中的应用。它是由 Zalando 提供的目的是为了给机器学习社区提供一个标准化、简洁但具有挑战性的视觉分类数据集。FashionMNIST 是 MNIST 数据集的一个变种后者包含手写数字图像。
主要特点
图像大小每张图像的分辨率为 28x28 像素每个像素为灰度值单通道值在 0 到 255 之间。图像类型这些图像展示了 10 种不同类型的时尚商品例如鞋子、T 恤、外套等。数据集结构 训练集60,000 张图像测试集10,000 张图像 类别数据集包含 10 个类别分别对应不同的服装商品每个类别有对应的标签。
类别标签
0: T 恤/上衣1: 裤子2: 套头衫3: 连衣裙4: 外套5: 凉鞋6: 衬衫7: 运动鞋8: 包9: 靴子
目标
FashionMNIST 的目标是对每张 28x28 的灰度图像进行分类判定该图像属于哪个类别例如是 “T 恤”、“裤子” 还是 “运动鞋” 等。因此它是一个 多类分类 问题通常被用来评估各种机器学习模型尤其是在图像分类任务中的表现。
为什么使用 FashionMNIST
FashionMNIST 与原始的 MNIST 数据集相似但相比 MNIST手写数字FashionMNIST 的图像内容更加复杂且多样。这使得它在很多机器学习和深度学习领域成为了一个较为简单但富有挑战性的测试集。它被广泛应用于
深度学习模型的评估特别是用于测试卷积神经网络CNN等模型的性能。学习和研究它提供了一个简单且标准化的图像分类数据集适用于机器学习入门或新模型的验证。
图像示例
每张图像都是 28x28 像素的灰度图显示的是一件衣物的图片。图像尺寸较小适合在初学者的机器学习项目中进行训练因为它不需要大量的计算资源。
数据加载与预处理
FashionMNIST 数据集一般会在加载时进行一些标准的预处理步骤如
归一化将像素值从 [0, 255] 范围映射到 [0, 1] 范围或者进行标准化常常帮助提升模型的收敛速度。转换通常使用 transforms.ToTensor() 将图像转换为 PyTorch 中的 Tensor 格式。
下载和加载 FashionMNISTPyTorch 代码示例
import torchvision
from torchvision import transforms# 加载训练集数据
train_data torchvision.datasets.FashionMNIST(rootdata, # 存储路径trainTrue, # 训练集downloadTrue, # 下载数据集transformtransforms.ToTensor(), # 转换为 Tensor 格式
)# 加载测试集数据
test_data torchvision.datasets.FashionMNIST(rootdata,trainFalse, # 测试集downloadTrue,transformtransforms.ToTensor(),
)这段代码使用 torchvision.datasets.FashionMNIST 来下载并加载训练和测试数据集图像会被转换为 PyTorch 的 Tensor 格式。
数据集使用场景
入门项目对于初学者FashionMNIST 是一个非常适合入门的图像分类数据集因为它相对简单且具有一定的挑战性。模型对比与验证在机器学习和深度学习领域FashionMNIST 常常作为测试模型性能的标准数据集之一用来对比不同算法如支持向量机、KNN、神经网络等的表现。神经网络训练尤其是卷积神经网络CNN在图像分类任务中的应用FashionMNIST 为其提供了一个理想的训练平台。
数据集可视化
import torch
from torchvision import datasets, transforms
import matplotlib.pyplot as plt
import numpy as np# 下载 FashionMNIST 数据集
transform transforms.Compose([transforms.ToTensor()]) # 只需要转换为 Tensor
train_data datasets.FashionMNIST(rootdata, trainTrue, downloadTrue, transformtransform)# 获取前 10 张图像以及对应的标签
images, labels zip(*[(train_data[i][0], train_data[i][1]) for i in range(10)])# 类别名称映射
class_names [T-shirt/top, Trouser, Pullover, Dress, Coat,Sandal, Shirt, Sneaker, Bag, Ankle boot
]# 设置绘图
fig, axes plt.subplots(1, 10, figsize(15, 15)) # 创建 1 行 10 列的子图for i in range(10):ax axes[i]ax.imshow(images[i].squeeze(), cmapgray) # squeeze 去掉多余的维度cmap 为灰度色ax.set_title(class_names[labels[i]]) # 标注类别名称ax.axis(off) # 不显示坐标轴plt.show() # 显示图像运行结果 总结
FashionMNIST 是一个标准化的图像分类数据集由 Zalando 提供。它由 10 类不同的时尚商品构成训练集包含 60,000 张图像测试集包含 10,000 张图像。它适用于深度学习、机器学习模型的训练和评估尤其适合初学者学习和实验。
项目实例
代码
import torch
import torch.nn as nn
import torchvision
import torchvision.transforms as transforms
import matplotlib.pyplot as plt# 下载训练数据集FashionMNIST
training_data torchvision.datasets.FashionMNIST(rootdata, # 数据集存储位置trainTrue, # 使用训练集downloadTrue, # 如果数据集不存在则下载transformtransforms.ToTensor(), # 转换为Tensor
)# 下载测试数据集FashionMNIST
test_data torchvision.datasets.FashionMNIST(rootdata,trainFalse, # 使用测试集downloadTrue,transformtransforms.ToTensor(), # 转换为Tensor
)# 标签的映射字典数字标签对应的衣物类别名称
labels_map {0: T-Shirt,1: Trouser,2: Pullover,3: Dress,4: Coat,5: Sandal,6: Shirt,7: Sneaker,8: Bag,9: Ankle Boot,
}# 可视化FashionMNIST数据集中前9张图片
figure plt.figure(figsize(8, 8)) # 创建一个8x8的图像画布
cols, rows 3, 3 # 设置行列数
for i in range(1, cols * rows 1):sample_idx torch.randint(len(training_data), size(1,)).item() # 随机选取一张图片img, label training_data[sample_idx] # 获取图片和标签figure.add_subplot(rows, cols, i) # 在画布上添加子图plt.title(labels_map[label]) # 设置图片的标题为标签对应的衣物类别plt.axis(off) # 关闭坐标轴显示plt.imshow(img.squeeze(), cmapgray) # 显示图像squeeze去掉多余维度cmap设置为灰度图
plt.show() # 展示图像# 设置训练过程中的超参数
num_epochs 10 # 训练的轮数
batch_size 32 # 批大小
weight_decay 1e-4 # 权重衰减L2正则化
learning_rate 0.001 # 学习率# 创建数据加载器训练集和测试集
train_dataloader torch.utils.data.DataLoader(training_data, batch_sizebatch_size)
test_dataloader torch.utils.data.DataLoader(test_data, batch_sizebatch_size)# 打印测试集的一个batch的尺寸和标签类型
for X, y in test_dataloader:print(fShape of X [N, C, H, W]: {X.shape}) # X是输入图像N是批大小C是通道数H和W是图像的高和宽print(fShape of y: {y.shape} {y.dtype}) # y是标签显示其维度和数据类型break # 只打印一个batch的信息# 检测是否使用GPU进行训练
device cuda if torch.cuda.is_available() else cpu
print(fUsing {device} device) # 输出当前使用的设备CUDA or CPU# 定义一个简单的神经网络模型
class NeuralNet(nn.Module):def __init__(self, input_size, hidden_size, num_classes):super(NeuralNet, self).__init__()self.fc1 nn.Linear(input_size, hidden_size) # 第一层全连接层输入784个特征输出hidden_size个特征self.relu nn.ReLU() # ReLU激活函数self.fc2 nn.Linear(hidden_size, num_classes) # 第二层全连接层输出num_classes个类别的预测值def forward(self, x):out self.fc1(x) # 输入通过第一层out self.relu(out) # ReLU激活out self.fc2(out) # 输入通过第二层输出结果return out# 假设输入是28x28的图像展开为784维隐藏层大小为500分类数为10
model NeuralNet(input_size784, hidden_size500, num_classes10).to(device)# 定义损失函数和优化器
criterion nn.CrossEntropyLoss() # 使用交叉熵损失函数适用于多分类问题
optimizer torch.optim.Adam(model.parameters(), lrlearning_rate, weight_decayweight_decay) # 使用Adam优化器# 开始训练模型
total_step len(train_dataloader) # 获取训练集的总批次数
for epoch in range(num_epochs): # 遍历每一个epochfor i, (images, labels) in enumerate(train_dataloader): # 遍历每一个batchimages images.reshape(-1, 28*28).to(device) # 将28x28的图像展开成784维向量转移到deviceGPU/CPUlabels labels.to(device) # 标签转移到设备上# 前向传播outputs model(images) # 将输入传入模型得到预测输出loss criterion(outputs, labels) # 计算损失# 反向传播和优化optimizer.zero_grad() # 清零之前的梯度loss.backward() # 计算当前梯度optimizer.step() # 更新模型参数# 每100个batch输出一次训练状态if (i 1) % 100 0:print(fEpoch [{epoch1}/{num_epochs}], Step [{i1}/{total_step}], Loss: {loss.item():.4f})# 训练完成后在测试集上评估模型的准确率
model.eval() # 设置模型为评估模式此时BatchNorm等层使用移动平均值而不是批量值
with torch.no_grad(): # 不需要计算梯度correct 0total 0for images, labels in test_dataloader:images images.reshape(-1, 28*28).to(device) # 将图像展开为784维labels labels.to(device) # 标签转移到设备上outputs model(images) # 获取模型的输出_, predicted torch.max(outputs.data, 1) # 获取预测类别outputs.data返回模型的预测结果total labels.size(0) # 统计总样本数correct (predicted labels).sum().item() # 统计预测正确的样本数# 输出模型在测试集上的准确率print(fTest Accuracy of the model on the 10000 test images: {100 * correct / total} %)