使用pytorch手动加载mnist、cifar10数据集

本文介绍了在无法使用torchvision时,如何手动加载MNIST和CIFAR10数据集。首先,详细展示了加载MNIST数据集并实现简单全连接层的过程,包括加载数据、定义生成器和计算。接着,通过定义ResNet18网络,手动加载CIFAR10数据集进行分类任务,并进行了训练和测试。虽然在训练过程中存在第100个epoch结果未打印的问题,但整体实现了数据加载和模型训练的目标。
摘要由CSDN通过智能技术生成

这两天在某个平台上白嫖GPU资源,奈何这个平台不支持用torchvision下载数据集,于是只能用自己电脑下载好数据之后上传再自己手动DIY加载数据集。

参考链接:
加载mnist数据集
加载cifar10数据集

加载mnist数据集并实现简单的全连接层

import numpy as np 
import pandas as pd 
from torchvision import datasets,transforms
from torch.utils.data import DataLoader,Dataset
import torch
import gzip,os
def load_data(data_folder, data_name, label_name):
    with gzip.open(os.path.join(data_folder,label_name), 'rb') as lbpath:
        y_train = np.frombuffer(lbpath.read(), np.uint8, offset=8)
    with gzip.open(os.path.join(data_folder,data_name), 'rb') as imgpath:
        x_train = np.frombuffer(
            imgpath.read(), np.uint8, offset=16).reshape(len(y_train), 28, 28)
    return (x_train, y_train)
class DealDataset(Dataset):
    """
        读取数据、初始化数据
    """
    def __init__(self,folder,data_name,label_name,transform = None):
        (train_set,train_labels) = load_data(folder,data_name,label_name)
        self.train_set = train_set
        self.train_labels = train_labels
        self.transform = transform
    
    def __getitem__(self,index):

        img,target = self.train_set[index],int(self.train_labels[index])
        if self.transform is not None:
            img = self.transform(img)
        return img, target
    
    def __len__(self):
        return len(self.train_set)
加载数据集

数据集事先已经下载好保存在某个文件夹下

trainDataset = DealDataset('../data/MNIST/raw', "train-images-idx3-ubyte.gz","train-labels-idx1-ubyte.gz",transform=transforms.Compose([
                       transforms.ToTensor(),
                       transforms.Normalize((0.1307,), (0.3081,))
                   ]))
testDataset = DealDataset('../data/MNIST/raw', "t10k-images-idx3-ubyte.gz","t10k-labels-idx1-ubyte.gz",transform=transforms.Compose([
        transforms.ToTensor(),
        transforms.Normalize((0.1307,), (0.3081,))
    ]))
定义生成器
batch_size=200
train_loader = DataLoader(
    dataset=trainDataset,
    batch_size=batch_size, # 一个批次可以认为是一个包,每个包中含有100张图片
    shuffle=True,
)

test_loader = DataLoader(
    dataset=testDataset,
    batch_size=batch_size, # 一个批次可以认为是一个包,每个包中含有100张图片
    shuffle=True,)
定义全连接层并计算
import  torch.nn.functional as F
import  torch.optim as optim
import  torch.nn as nn

learning_rate=0.01
epochs=10

class MLP(nn.Module):
    def __init__(self):
        super(MLP,self).__init__()
        
        self.model = nn.Sequential(
        nn.Linear(784,200),
        nn.LeakyReLU(inplace = True),
        nn.Linear(200,200),
        nn.LeakyReLU(inplace = True),
        nn.Linear(200,10),
        nn.LeakyReLU(inplace = True),
        )
    
    def forward(self,x):
        x = self.model(x)
        return x

device = torch.device('cuda:0') 
## 在GPU上计算
net = MLP().to(device)
optimizer = optim.SGD(net.p
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值