首页 > 其他分享 >学习笔记8:全连接网络实现MNIST分类(torch内置数据集)

学习笔记8:全连接网络实现MNIST分类(torch内置数据集)

时间:2024-06-04 09:23:30浏览次数:10  
标签:acc loss 内置 torch epoch test import MNIST

转自:https://www.cnblogs.com/miraclepbc/p/14344935.html

相关包导入

import torch
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from torch import nn
import torch.nn.functional as F
from torch.utils.data import TensorDataset
from torch.utils.data import DataLoader
from sklearn.model_selection import train_test_split
import torchvision
from torchvision import datasets, transforms
%matplotlib inline

数据集加载

transformation = transforms.Compose([
    transforms.ToTensor(),       ## 转化为一个tensor, 转换到0-1之间, 将channnel放在第一维
])

这里是定义了数据变换的方式,用的transforms.ToTensor()。
这个方法的作用是将数据类型转化为一个tensor类型、将数据归一化,并且将channel放在第一维上

train_ds = datasets.MNIST(
    'E:/datasets2/1-18/dataset/daatset',
    train = True,
    transform  =transformation,
    download = True
)

test_ds = datasets.MNIST(
    'E:/datasets2/1-18/dataset/daatset',
    train = False,
    transform = transformation,
    download = True
)

datasets和transforms都在torchvision包里面,用的时候需要引用一下。
这里面四个属性分别表示的是:数据集下载后存放的位置,是否是训练数据,变换方式,是否需要下载

train_dl = DataLoader(train_ds, batch_size = 64, shuffle = True)
test_dl = DataLoader(test_ds, batch_size = 256)

模型定义与训练(套用模板)

class Model(nn.Module):
    def __init__(self):
        super().__init__()
        self.linear_1 = nn.Linear(28 * 28, 120)
        self.linear_2 = nn.Linear(120, 84)
        self.linear_3 = nn.Linear(84, 10)
    def forward(self, input):
        x = input.view(-1, 28 * 28)
        x = F.relu(self.linear_1(x))
        x = F.relu(self.linear_2(x))
        x = self.linear_3(x)
        return x

loss_func = torch.nn.CrossEntropyLoss()

def fit(epoch, model, trainloader, testloader):
    correct = 0
    total = 0
    running_loss = 0
    for x, y in trainloader:
        y_pred = model(x)
        loss = loss_func(y_pred, y)
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
        with torch.no_grad():
            y_pred = torch.argmax(y_pred, dim = 1)
            correct += (y_pred == y).sum().item()
            total += y.size(0)
            running_loss += loss.item()

    epoch_acc = correct / total
    epoch_loss = running_loss / len(trainloader.dataset)
    
    test_correct = 0
    test_total = 0
    test_running_loss = 0
    
    with torch.no_grad():
        for x, y in testloader:
            y_pred = model(x)
            loss = loss_func(y_pred, y)
            y_pred = torch.argmax(y_pred, dim = 1)
            test_correct += (y_pred == y).sum().item()
            test_total += y.size(0)
            test_running_loss += loss.item()
    epoch_test_acc = test_correct / test_total
    epoch_test_loss = test_running_loss / len(testloader.dataset)
    
    print('epoch: ', epoch, 
          'loss: ', round(epoch_loss, 3),
          'accuracy: ', round(epoch_acc, 3),
          'test_loss: ', round(epoch_test_loss, 3),
          'test_accuracy: ', round(epoch_test_acc, 3))
    
    return epoch_loss, epoch_acc, epoch_test_loss, epoch_test_acc

model = Model()
optimizer = torch.optim.Adam(model.parameters(), lr = 0.001)
epochs = 20

train_loss = []
train_acc = []
test_loss = []
test_acc = []
for epoch in range(epochs):
    epoch_loss, epoch_acc, epoch_test_loss, epoch_test_acc = fit(epoch, model, train_dl, test_dl)
    train_loss.append(epoch_loss)
    train_acc.append(epoch_acc)
    test_loss.append(epoch_test_loss)
    test_acc.append(epoch_test_acc)

训练结果

标签:acc,loss,内置,torch,epoch,test,import,MNIST
From: https://www.cnblogs.com/gongzb/p/18230122

相关文章

  • 学习笔记9:卷积神经网络实现MNIST分类(GPU加速)
    转自:https://www.cnblogs.com/miraclepbc/p/14345342.html相关包导入importtorchimportpandasaspdimportnumpyasnpimportmatplotlib.pyplotaspltfromtorchimportnnimporttorch.nn.functionalasFfromtorch.utils.dataimportTensorDatasetfromtorch.ut......
  • Pytorch根据论文手搓CoPE
    根据论文《ContextualPositionEncoding: LearningtoCountWhat’sImportant》编写的CoPE代码。具备多头计算能力,本人水平不高,个人代码未经验证,有问题和建议欢迎指出。CoPE代码为代替LlamaModel中的RoPE而设计,因此函数名称类似于LlamaModel的RoPE,但实际功能略有不同,有待商......
  • BK7258--wifi音视频soc芯片,1080P H264 wifi低功耗保活,内置BLE,音频code,psram,flash,USB2.
    BK7258是上海博通推出的高度集成的Wi-Fi+BLE combo音视频芯片,支持UVC和DVP摄像头,该芯片集成音视频外设及接口,1080P,H.264,低功耗,内置flash,dsp,psram,驱屏,回声消除及降噪等,广泛适用于可视猫眼,门锁,门铃,ipc,内窥,儿童相机等应用市场。可视门铃应用:DVP接口支持720p25fps图像采集;MJPE......
  • Windows10系统中安装与配置PyTorch(无GPU版本)
    文章目录1.什么是PyTorch2.PyTorch的安装与配置(无GPU)2.1创建环境2.2安装pytorch库(无GPU)2.3验证安装结果1.什么是PyTorchPyTorch是一种用于构建深度学习模型且功能完备的开源框架,通常用于处理图像识别和语言处理等应用当中的机器学习。PyTorch保留了Torch(L......
  • PyTorch 深度学习 (龙龙老师)电子版下载pdf百度云
    书:pan.baidu.com/s/1rOoEvizAhkQyF8xScVh51w?pwd=8onw提取码:8onw我的阅读笔记:PyTorch基础:介绍PyTorch的核心概念和基本操作,包括张量(Tensor)的计算、自动微分(Autograd)、神经网络(nn.Module)的构建等。神经网络基础:讲解神经网络的基本原理和常见结构,如全连接层、卷积层、循环层等......
  • 网关(Gateway)- 内置过滤器工厂
    官方文档:SpringCloudGateway内置过滤器工厂AddRequestHeaderGatewayFilterFactory为请求添加HeaderHeader的名称及值配置说明server:port:8088spring:application:name:api-gatewaycloud:nacos:discovery:server-addr:127.......
  • 【PyTorch】(三)----搭建卷积神经网络
    该系列笔记主要参考了小土堆的视频教程,传送门:P1.PyTorch环境的配置及安装(ConfigurationandInstallationofPyTorch)【PyTorch教程】_哔哩哔哩_bilibili涉及到的文件/数据集网盘:链接:https://pan.baidu.com/s/1aZmXokdpbA97qQ2kHvx_JQ?pwd=1023提取码:1023在前面的两篇......
  • 动手学深度学习4.6 暂退法-笔记&练习(PyTorch)
    以下内容为结合李沐老师的课程和教材补充的学习笔记,以及对课后练习的一些思考,自留回顾,也供同学之人交流参考。本节课程地址:丢弃法_哔哩哔哩_bilibili本节教材地址:4.6.暂退法(Dropout)—动手学深度学习2.0.0documentation(d2l.ai)本节开源代码:...>d2l-zh>pytorch>chapter......
  • 【Python内功心法】:深挖内置函数,释放语言潜能
    文章目录......
  • TorchServe详解和应用
    TorchServer是PyTorch的一个组件,它是一个轻量级的服务框架,用于部署和管理PyTorch模型,以便在生产环境中提供高效、可扩展的推理服务。TorchServer提供了RESTfulAPI,可以方便地与其他系统集成,支持模型热加载和热更新,确保模型的快速部署和更新。以下是TorchServer的一些关键特......