李沐老师动手深度学习pytorch版本的读取fashion_mnist数据并用AlexNet模型训练,其中修改为利用本地的数据集训练

李沐老师的d2l.load_data_fashion_mnist里面没有root参数,所以只会下载,不能利用本地的fashion_mnist数据。所以我使用torchvision 的datasets里面FashionMNIST方法,又由于李沐老师此处是利用AlexNet模型来训练fashion_mnist数据,所以我们需要调整数据集的大小

导入必要的库和模块

import torch 
from torch import nn 
from d2l import torch as d2l
import numpy as np  
from torch.utils.data import Dataset, DataLoader  
import torchvision
import torchvision.transforms as transforms

转换数据

由于我们需要在加载数据同时定义数据转换,可以使用transforms.Compose来组合多个转换操作,使用Resize方法来调整图片大小,使其可以符合AlexNet的输入尺寸

 transform = transforms.Compose([  
    transforms.Resize((224, 224)),  # 将图片调整为224x224的大小  
    transforms.ToTensor(),  # 将PIL Image或numpy.ndarray转换为tensor,并归一化到[0., 1.]  
    # 可以选择添加transforms.Normalize进行进一步的标准化操作  
])

加载本地的fashion_mnist数据集

注意root参数,PyTorch 期望 FashionMNIST 数据集在指定的根目录下以特定的方式组织,确保下载好的文件存在于你指定的 root 路径下的 FashionMNIST/raw/ 文件夹中。可以参考我这篇博客:pytorch加载本地文件的root设置

通过train=False/True来设置训练集和测试集
通过设置download=True/False来确定找不到本地数据集的时候是否从网络下载
通过transform 指定特征和标签转换

#加载本地数据集,注意root参数
minist_train = torchvision.datasets.FashionMNIST(root='F:\\deeplearning\\fashion_mnist',train=True,download=False,transform=transform)
minist_test = torchvision.datasets.FashionMNIST(root='F:\\deeplearning\\fashion_mnist',train=False,download=False,transform=transform)

print(type(minist_train))
print(len(minist_train),len(minist_test))

创建数据加载器,方便批次化处理

# 创建数据加载器  
batch_size = 128  
train_iter = DataLoader(minist_train, batch_size=batch_size, shuffle=True)  
test_iter = DataLoader(minist_test, batch_size=batch_size, shuffle=False) 

大致实现AlexNet网络架构

李沐老师在pytorch版本的动手深度学习中实现的模型

net = nn.Sequential(
# 这里使用一个11*11的更大窗口来捕捉对象。
# 同时,步幅为4,以减少输出的高度和宽度。
# 另外,输出通道的数目远大于LeNet
nn.Conv2d(1, 96, kernel_size=11, stride=4, padding=1), nn.ReLU(),
nn.MaxPool2d(kernel_size=3, stride=2),
# 减小卷积窗口,使用填充为2来使得输入与输出的高和宽一致,且增大输出通道数
nn.Conv2d(96, 256, kernel_size=5, padding=2), nn.ReLU(),
nn.MaxPool2d(kernel_size=3, stride=2),
# 使用三个连续的卷积层和较小的卷积窗口。
# 除了最后的卷积层,输出通道的数量进一步增加。
# 在前两个卷积层之后,汇聚层不用于减少输入的高度和宽度
nn.Conv2d(256, 384, kernel_size=3, padding=1), nn.ReLU(),
nn.Conv2d(384, 384, kernel_size=3, padding=1), nn.ReLU(),
nn.Conv2d(384, 256, kernel_size=3, padding=1), nn.ReLU(),
nn.MaxPool2d(kernel_size=3, stride=2),
nn.Flatten(),
# 这里,全连接层的输出数量是LeNet中的好几倍。使用dropout层来减轻过拟合
nn.Linear(6400, 4096), nn.ReLU(),
nn.Dropout(p=0.5),
nn.Linear(4096, 4096), nn.ReLU(),
nn.Dropout(p=0.5),
# 最后是输出层。由于这里使用Fashion-MNIST,所以用类别数为10,而非论文中的1000
nn.Linear(4096, 10))

设置学习率,epoch并在GPU上训练

lr, num_epochs = 0.01, 10
d2l.train_ch6(net, train_iter, test_iter, num_epochs, lr, d2l.try_gpu())

结果如下

在这里插入图片描述

  • 8
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值