卷积神经网络(AlexNet)识别Fashion-MNIST数据集(Pytorch版)
1. 前言
1.1 案例介绍
本案例使用Pytorch搭建一个稍微简化的AlexNet网络结构,用于Fashion-MNIST数据集的图像分类。针对该问题的分析可以分为数据准备、模型建立以及使用训练集进行训练和使用测试集测试模型的效果。
1.2 环境配置
⑴ 操作系统: Windows10
⑵ 编译器环境: PyCharm Community Edition 2021.2
⑶ 配置环境: Pytorch1.7.1 + torchvision8.2 + CUDA11.3
1.3 模块导入
本案例需要导入如下的库文件和相关模块:
import numpy as np
import pandas as pd
from sklearn.metrics import accuracy_score, confusion_matrix, classification_report
import matplotlib.pyplot as plt
import seaborn as sns
import copy
import time
import torch
import torch.nn as nn
from torch.optim import Adam
import torch.utils.data as Data
from torchvision import transforms
from torchvision.datasets import FashionMNIST
2. 图像数据准备
在模型建立与训练之前,首先准备FashionMNIST数据集,该数据集可以直接使用torchvision库中datasets模块的FashionMNIST()函数读取,如果指定的工作文件夹中没有当前数据,可以从网络上自动下载该数据。
2.1 训练验证集的准备
训练验证集的加载处理程序被包装成如下的train_data_process()函数 ,它的作用是导入训练数据集,然后使用Data.DataLoader()函数将其定义为数据加载器,每个batch中会包含64个样本,通过len()函数可以计算数据加载器中包含的batch数量,输出显示train_loader中包含938个batch。需要注意的是参数shuffle = False,表示加载器中每个batch使用的样本都是固定的,这样有利于在训练模型时根据迭代的次数将其分为训练集和验证集。同时为了观察数据集中每个图像的内容,可以获取一个batch的图像,然后将其可视化,以观察数据。
# 处理训练集数据
def train_data_process():
# 加载FashionMNIST数据集
train_data = FashionMNIST(root="./data/FashionMNIST", # 数据路径
train=True, # 只使用训练数据集
transform=transforms.Compose([transforms.Resize(size=224), transforms.ToTensor()]), # AlexNet的输入数据大小为224*224,因此这里将FashionMNIST数据集的尺寸从28扩展到224
# 把PIL.Image或者numpy.array数据类型转变为torch.FloatTensor类型
download=False, # 若本身没有下载相应的数据集,则选择True
)
train_loader = Data.DataLoader(dataset=train_data, # 传入的数据集
batch_size=64, # 每个Batch中含有的样本数量
shuffle=True, # 不对数据集重新排序
num_workers=0, # 加载数据所开启的进程数量
)
print("The number of batch in train_loader:", len(train_loader)) # 一共有938个batch,每个batch含有64个训练样本
# 获得一个Batch的数据
for step, (b_x, b_y) in enumerate(train_loader):
if step > 0:
break
batch_x = b_x.squeeze().numpy() # 将四维张量移除第1维,并转换成Numpy数组
batch_y = b_y.numpy() # 将张量转换成Numpy数组
class_label = train_data.classes # 训练集的标签
class_label[0] = "T-shirt"
print("The size of batch in train data:", batch_x.shape) # 每个mini-batch的维度是64*224*224
# 可视化一个Batch的图像
plt.figure(figsize=(12, 5))
for ii in np.arange(len(batch_y)):
plt.subplot(4, 16, ii+1)
plt.imshow(batch_x[ii, :, :], cmap=plt.cm.g
366


识别Fashion-MNIST数据集(Pytorch版)&spm=1001.2101.3001.11974&articleId=119855019&d=1&t=3&u=755d0814cddc44869d26b79254ccedb6)

被折叠的 条评论
为什么被折叠?



