首页 > 其他分享 >利用pytorch的datasets在本地读取MNIST数据集进行分类

利用pytorch的datasets在本地读取MNIST数据集进行分类

时间:2024-10-12 10:51:16浏览次数:10  
标签:datasets nn dataset device pytorch train test loader MNIST

MNIST数据集下载地址:tensorflow-tutorial-samples/mnist/data_set at master · geektutu/tensorflow-tutorial-samples · GitHub

数据集存放和dataset的参数设置:

完整的MNIST分类代码:

import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, transforms
from torch.utils.data import DataLoader
from torch.nn import Sequential

# 构建卷积神经网络
class Simple_CNN(nn.Module):  # 从父类 nn.Module 继承
    def __init__(self):  # 相当于 C++ 的构造函数
        # super() 函数是用于调用父类(超类)的一个方法,是用来解决多重继承问题的
        super(Simple_CNN, self).__init__()

        # 第一层卷积层。Sequential(意为序列) 括号内表示要进行的操作
        self.conv1 = Sequential(
            nn.Conv2d(in_channels=1, out_channels=64, kernel_size=3, stride=1, padding=1),
            nn.BatchNorm2d(64),
            nn.ReLU(),
            nn.MaxPool2d(kernel_size=2, stride=2)
        )

        # 第二卷积层
        self.conv2 = Sequential(
            nn.Conv2d(in_channels=64, out_channels=128, kernel_size=3, stride=1, padding=1),
            nn.BatchNorm2d(128),
            nn.ReLU(),
            nn.MaxPool2d(kernel_size=2, stride=2)
        )

        # 全连接层(Dense,密集连接层)
        self.dense = Sequential(
            nn.Linear(7 * 7 * 128, 1024),
            nn.ReLU(),
            nn.Dropout(p=0.5),
            nn.Linear(1024, 10)
        )

    def forward(self, x):  # 正向传播
        x1 = self.conv1(x)
        x2 = self.conv2(x1)
        x = x2.view(-1, 7 * 7 * 128)
        x = self.dense(x)
        return x

# 训练模型
def train(model, device, train_loader, optimizer, criterion, epochs):
    model.train()
    for epoch in range(epochs):
        for data, target in train_loader:
            data, target = data.to(device), target.to(device)
            optimizer.zero_grad()
            output = model(data)
            loss = criterion(output, target)
            loss.backward()
            optimizer.step()
        print(f'Epoch {epoch+1}, Loss: {loss.item()}')

# 测试模型
def test(model, device, test_loader):
    model.eval()
    test_loss = 0
    correct = 0
    with torch.no_grad():
        for data, target in test_loader:
            data, target = data.to(device), target.to(device)
            output = model(data)
            test_loss += criterion(output, target).item()
            pred = output.argmax(dim=1, keepdim=True)
            correct += pred.eq(target.view_as(pred)).sum().item()
    test_loss /= len(test_loader.dataset)
    print(f'Test set: Average loss: {test_loss:.4f}, \
        Accuracy: {correct}/{len(test_loader.dataset)} ({100. * correct / len(test_loader.dataset):.0f}%)')


if __name__ == "__main__":
    # 设置设备
    device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

    # 加载数据集
    transform = transforms.Compose([
        transforms.ToTensor(),
        transforms.Normalize((0.5,), (0.5,))
    ])

    train_dataset = datasets.MNIST(root='dataset/mnist/', train=True, download=True, transform=transform)
    test_dataset = datasets.MNIST(root='dataset/mnist/', train=False, download=True, transform=transform)

    train_loader = DataLoader(dataset=train_dataset, batch_size=64, shuffle=True)
    test_loader = DataLoader(dataset=test_dataset, batch_size=64, shuffle=False)

    # 初始化网络和优化器
    model = Simple_CNN().to(device)
    optimizer = optim.Adam(model.parameters(), lr=0.001)
    criterion = nn.CrossEntropyLoss()

    # 运行训练和测试
    epochs = 5
    train(model, device, train_loader, optimizer, criterion, epochs)
    test(model, device, test_loader)
    print('done')

实验结果:

 

标签:datasets,nn,dataset,device,pytorch,train,test,loader,MNIST
From: https://www.cnblogs.com/picassooo/p/18460054

相关文章

  • 基于Anaconda搭建深度学习环境,安装Tensorflow、Keras和Pytorch
    1、Anaconda安装(一款可以同时创建跟管理多个python环境的软件)https://blog.csdn.net/run_success/article/details/134656460安装好Anaconda之后,我们可以接着配置一个用于人工智能开发的Python环境。一、创建新的Python环境1、打开AnacondaPrompt2、创建一个名为badou的Py......
  • 使用PyTorch搭建Transformer神经网络:入门篇
    目录简介环境设置PyTorch基础Transformer架构概述实现Transformer的关键组件5.1多头注意力机制5.2前馈神经网络5.3位置编码构建完整的Transformer模型训练模型总结与进阶建议简介Transformer是一种强大的神经网络架构,在自然语言处理等多个领域取得了巨大......
  • 《Pytorch深度学习实践》P3梯度下降法 笔记+代码+图像:梯度下降、随机梯度下降、小批量
    目录梯度下降(BatchGradientDescent)随机梯度下降(StochasticGradienDescent,SGD)小批量随机梯度下降(Mini-batchGradientDescent)梯度下降(BatchGradientDescent)介绍:使用所有的训练样本计算梯度,并且在每次迭代中更新权重。原理:假设有一个损失函数,它依赖于参数。通过最......
  • 使用StyleGAN3合成自定义数据(pytorch代码)
    使用StyleGAN3合成自定义数据在现代计算机视觉和机器学习领域,生成对抗网络(GAN)已成为生成高质量图像的重要工具。其中,StyleGAN3是NVIDIA团队推出的第三代生成对抗网络,其显著改进了图像生成的质量和稳定性。本文旨在介绍如何在训练数据较少的情况下,使用StyleGAN3来合成......
  • 机器学习四大框架详解及实战应用:PyTorch、TensorFlow、Keras、Scikit-learn
    目录框架概述PyTorch:灵活性与研究首选TensorFlow:谷歌加持的强大生态系统Keras:简洁明了的高层APIScikit-learn:传统机器学习的必备工具实战案例图像分类实战自然语言处理实战回归问题实战各框架的对比总结选择合适的框架1.框架概述机器学习框架在开发过程中起着至......
  • Open X-Embodiment: Robotic Learning Datasets and RT-X Models
    OpenX-Embodiment:RoboticLearningDatasetsandRT-XModels启发:在不同数据集上训练大规模、高容量模型以处理下游应用方面取得显著成功。是否能将所有数据整合在高容量机器人操作模型上使其有效适应新的机器人、任务、环境?贡献:提供了标准化数据格式和模型的数据集,收......
  • 十二、pytorch的基础知识
    1、快捷命令  2、Tensor  Tensor是PyTorch中重要的数据结构,可认为是一个高维数组。它可以是一个数(标量)、一维数组(向量)、二维数组(矩阵)以及更高维的数组。Tensor和Numpy的ndarrays类似,但Tensor可以使用GPU进行加速。  Tensor的基本使用:from__future__importprint_func......
  • 安装 Anaconda、PyTorch(GPU 版)库与 PyCharm
    Anaconda是一款巨大的Python环境集成平台,里面包含了Python解释器、JupyterNotebook代码编辑器以及很多的第三方库,所以安装Anaconda后我们无需再安装Python解释器,非常方便。一、安装Anaconda1.卸载Anaconda(可选)如果我们原来的电脑上安装过Anaconda,为了避免重复安......
  • Pytorch常用代码段汇总
    来源:https://zhuanlan.zhihu.com/p/104019160PyTorch最好的资料是官方文档。本文是PyTorch常用代码段,在参考资料[1](张皓:PyTorchCookbook)的基础上做了一些修补,方便使用时查阅。1.基本配置导入包和版本查询importtorchimporttorch.nnasnnimporttorchvisionprint(to......
  • (2024已成功)pytorch安装初学者踩过的坑
    pytorch的教学视频年头已久,而软件的版本都更新很快,于是很容易配置环境出错。这里博主分享自己踩到的坑一开始配置环境便是分水岭的第一步,大家一定要自己上手做一遍,毕竟配置环境是python学习中永远绕不开的问题了!一、没有下cuda导致pytorch无法下载gpu版本照着小土堆的视频在......