Pytorch笔记之分类

文章目录


前言

使用Pytorch进行MNIST分类,使用TensorDataset与DataLoader封装、加载本地数据集。


一、导入库

python 复制代码
import numpy as np
import torch
from torch import nn, optim
from torch.utils.data import TensorDataset, DataLoader # 数据集工具
from load_mnist import load_mnist # 本地数据集

二、数据处理

1、导入本地数据集,将标签值设置为int类型,构建张量

2、使用TensorDataset与DataLoader封装训练集与测试集

python 复制代码
# 构建数据
x_train, y_train, x_test, y_test = \
    load_mnist(normalize=True, flatten=False, one_hot_label=False)
# 数据处理
x_train = torch.from_numpy(x_train.astype(np.float32))
y_train = torch.from_numpy(y_train.astype(np.int64))
x_test = torch.from_numpy(x_test.astype(np.float32))
y_test = torch.from_numpy(y_test.astype(np.int64))
# 数据集封装
train_dataset = TensorDataset(x_train, y_train)
test_dataset = TensorDataset(x_test, y_test)
batch_size = 64
train_loader = DataLoader(dataset=train_dataset,
                          batch_size=batch_size,
                          shuffle=True)
test_loader = DataLoader(dataset=test_dataset,
                          batch_size=batch_size,
                          shuffle=True)

三、构建模型

输入到全连接层之前需要把(batch_size,28,28)展平为(batch_size,784)

交叉熵损失函数整合了Softmax,在模型中可以不添加Softmax

python 复制代码
# 继承模型
class FC(nn.Module):
    def __init__(self):
        super().__init__()
        self.fc1 = nn.Linear(784, 10)
        self.softmax = nn.Softmax(dim=1)
    def forward(self, x):
        y = self.fc1(x.view(x.shape[0],-1))
        y = self.softmax(y)
        return y
# 定义模型
model = FC()
loss_function = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.1)

四、迭代训练

从DataLoader中取出x和y,进行前向和反向的计算

python 复制代码
for epoch in range(10):
    print('Epoch:', epoch)
    for i,data in enumerate(train_loader):
        x, y = data
        y_pred = model.forward(x)
        loss = loss_function(y_pred, y)
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()

五、模型评估

在测试集中进行验证

使用.item()获得tensor的取值

python 复制代码
	correct = 0
    for i,data in enumerate(test_loader):
        x, y = data
        y_pred = model.forward(x)
        _, y_pred = torch.max(y_pred, 1)
        correct += (y_pred == y).sum().item()
    acc = correct / len(test_dataset)
    print('Accuracy:{:.2%}'.format(acc))

总结

记录了TensorDataset与DataLoader的使用方法,模型的构建与训练和上一篇Pytorch笔记之回归相似。

相关推荐
民乐团扒谱机6 分钟前
【微实验】数模美赛备赛MATLAB实战:一文速通各种“马尔可夫”(Markov Model)
开发语言·人工智能·笔记·matlab·数据挖掘·马尔科夫链·线性系统
MistaCloud12 分钟前
Pytorch深入浅出(十三)之模型微调
人工智能·pytorch·python·深度学习
宵时待雨24 分钟前
数据结构(初阶)笔记归纳1:复杂度讲解
c语言·数据结构·笔记
今儿敲了吗34 分钟前
第二章 C++对C的核心拓展
c++·笔记
weixin_433179331 小时前
《旋元佑进阶文法》之 句型
笔记·英语语法
麻雀无能为力1 小时前
VAE(变分自编码器 Variational Auto-Encoder)学习笔记
笔记·学习
小途软件1 小时前
基于深度学习的驾驶人情绪识别
java·人工智能·pytorch·python·深度学习·语言模型
北岛寒沫1 小时前
北京大学国家发展研究院 经济学原理课程笔记(第十九课 长期经济增长)
经验分享·笔记·学习
ouliten2 小时前
vllm笔记(1):最基础的离线推理
笔记·vllm·模型推理
wtmReiner2 小时前
山东大学数值计算2026.1大三上期末考试回忆版
笔记·算法