PyTorch 识别 MNIST 手写数字

pytorch——mnist手写数据识别 1、pytorch自带的数据集 pytorch中自带数据集由两个上层的API提供,分别是torchvision和torchtext。其中,torchvision提供了对照片数据处理相关的API和数据,数据所在位置:torchvision.datasets,比如torchvision.datasets.MNIST(手写数字照片数据);torchtext提供了对文本数据处理相关的API和数据,数据所在位置:torchtext.datasets,比如torchtext.datasets.IMDB... 阅读详情

深度学习识别手写数字,用PyTorch实现,对象是有标号的手写数字数据集MNIST(Modified National Institute of Standards and Technology)

一般download MNIST数据集用以下command:

mnist = fetch_mldata('MNIST original')

但是因为在本机上总是出现timeout的错误,更改为以下command:

from sklearn.datasets import fetch_openml

mnist = fetch_openml('mnist_784')

PyTorch处理的流程:

  1. data预处理
  2. 创建DataLoader
  3. Nerual Network
  4. Loss Function
  5. Learning and Predicting
1. Data预处理

获取图片和label

X=mnist.data / 255   #normalization
y=mnist.target

试着显示一张图片和标号:

import matplotlib.pyplot as plt
%matplotlib inline

plt.imshow(X[0].reshape(28, 28), cmap='gray')
print("label is {}".format(y[0]))

pic and label

2. 创建DataLoader

把MNIST data转化为PyTorch可以用的DataLoader形式
处理流程如下:

  1. split training data and testing data
  2. convert numpy data to Tensor
  3. create Dataset
  4. convert Dataset to DataLoader
import torch
from torch.utils.data import TensorDataset, DataLoader
from sklearn.model_selection import train_test_split
import numpy as np
#1. split training data and testing data
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=1/7, random_state=0) #random seed is 0

#2. Convert data to torch.Tensor
X_train = torch.Tensor(X_train)  #Tensor default to FloatTensor
X_test = torch.Tensor(X_test)
y_train= np.vstack(y_object_train[:].astype(np.int64)) #convert np.object to int64, or cannot convert to Tensor format #Test
y_train = torch.LongTensor(y_train)
y_test= np.vstack(y_test[:].astype(np.int64)) #convert np.object to int64, or cannot convert to Tensor format #Test
y_test = torch.LongTensor(y_test)

#3. Create Dataset by data and label pair
ds_train = TensorDataset(X_train, y_train)
ds_test = TensorDataset(X_test, y_test)

#4. decide the batch size and create DataLoader
loader_train = DataLoader(ds_train, batch_size=64, shuffle=True) #default is ascending order from 0~9
loader_test = DataLoader(ds_test, batch_size=64, shuffle=False)
3. Create Nerual Network

用简单的fc和relu layer进行测试:

from torch import nn

model = nn.Sequential()
model.add_module('fc1', nn.Linear(28*28*1, 100))  #linear transformation, y = xA^T+b
model.add_module('relu1', nn.ReLU())
model.add_module('fc2', nn.Linear(100, 100))
model.add_module('relu2', nn.ReLU())
model.add_module('fc3', nn.Linear(100, 10))

print(model)

output:

Sequential(
  (fc1): Linear(in_features=784, out_features=100, bias=True)
  (relu1): ReLU()
  (fc2): Linear(in_features=100, out_features=100, bias=True)
  (relu2): ReLU()
  (fc3): Linear(in_features=100, out_features=10, bias=True)
)
4. Decide the loss function

optimizer选择Adam算法,loss function选cross entropy loss

from torch import optim

loss_fn = nn.CrossEntropyLoss() #-[ylogy^ + (1-y)log(1-y^)]  #loss function
optimizer = optim.Adam(model.parameters(), lr=0.01)   #learning rate=0.01

training函数:

# for 1 epoch
def train(epoch):
    model.train()
    
    for data, targets in loader_train:   #mini batch from loader
        optimizer.zero_grad()   #set gradient to 0
        outputs = model(data)  #input: data
        loss = loss_fn(outputs, targets.squeeze()) #add squeeze() function #Test
        
        loss.backward()  #backward propagation
        optimizer.step()  #update the parameters
        
    print ("epoch {} : terminated".format(epoch))

testing函数:

# for 1 epoch
def test():
    model.eval()
    correct = 0
    
    with torch.no_grad():  #do not calculate the gradient to save memory
        for data, targets in loader_test:
            outputs = model(data)
            
            _, predicted = torch.max(outputs.data, 1)
            correct += predicted.eq(targets.data.view_as(predicted)).sum()
            
    data_num = len(loader_test.dataset)
    print('\n testing correctness: {}/{} ({:.0f}%)\n'.format(correct, data_num, 100. * correct / data_num))

运行一次test(),可以看到未经训练的网络准确率在10%左右

testing correctness: 1082/10000 (10%)

训练3次后predict,可以看到准确率提高到了95%

for epoch in range(3):
    train(epoch)
    
test()

output:

epoch 0 : terminated
epoch 1 : terminated
epoch 2 : terminated

 testing correctness: 9543/10000 (95%)

测试一张图片,index可以自己定义

index = 2019

model.eval()  #predict
data = X_test[index]
output = model(data)
_, predicted = torch.max(output.data, 0)
print(predicted)

print("predicted result: {}".format(predicted))

X_test_show = (X_test[index]).numpy()
plt.imshow(X_test_show.reshape(28, 28), cmap='gray')
print("correct label is: {}".format(y_test[index]))

在这里插入图片描述

另一种Define by Run的模型写法:

import torch.nn as nn
import torch.nn.functional as F

class Net(nn.Module):
    
    def __init__(self, n_in, n_mid, n_out):
        super(Net, self).__init__()
        self.fc1 = nn.Linear(n_in, n_mid)
        self.fc2 = nn.Linear(n_mid, n_mid)
        self.fc3 = nn.Linear(n_mid, n_out)
        
    def forward(self, x):
        h1 = F.relu(self, fc1(x))
        h2 = F.relu(self.fc2(x))
        output = self.fc3(h2)
        return output
    
model = Net(n_in=28*28*1, n_mid=100, n_out=10)
print(model)
CNN01:Pytorch实现LeNet的Mnist手写数字识别 CNN01:Pytorch实现LeNet的Mnist手写数字识别 1、LeNet的网络结构和原理 阅读详情

相关推荐

从零开始用 PyTorch 搭建 CNN 手写数字识别模型(MNIST 实战教程)

本篇文章将带你从零开始,使用 PyTorch 搭建一个卷积神经网络(CNN)模型,实现对手写数字的识别。我们将以经典的 MNIST 数据集为例,深入讲解数据加载、模型构建、训练与评估的全过程,并最终实现自定义手写图片的本地识别测试。 通过理论结合实战,读者不仅能够掌握 PyTorch 的基础用法,还能理解 CNN 在图像处理中的应用原理。本教程适合深度学习初学者以及希望通过实战提升技能的开发者,配有完整源码和注释,助你轻松入门 AI 世界。 📌关键词:PyTorch、CNN、MNIST、手写数字识别、

博客虽小,世界尽在其中 4501

详解 Pytorch 实现 MNIST

MNIST虽然很简单,但是值得我们学习的东西还是有很多的。 项目虽然简单,但是个人建议还是将各个模块分开创建,特别是对于新人而言,模块化的创建会让读者更加清晰、易懂。 CNN模块:卷积神经网络的组成; train模块:利用CNN模型 对 MNIST数据集 进行训练并保存模型 test模块:加载训练好的模型对测试集数据进行测试 cnn.pt : train 的CNN模型 注意! 有GPU的小伙伴尽量使用GPU训练,GPU的训练速度比CPU的训练速度高许多倍,可以节约大量训练时间 CNN 模块 MN

绿色羽毛 1万+

PyTorch: CNN实战MNIST手写数字识别

PyTorch: CNN实战MNIST手写数字识别cnn导包加载数据构造CNN训练并计算损失结果 cnn 卷积神经网络CNN的结构一般包含这几个层: 输入层:用于数据的输入 卷积层:使用卷积核进行特征提取和特征映射 激励层:由于卷积也是一种线性运算,因此需要增加非线性映射 池化层:进行下采样,对特征图稀疏处理,减少数据运算量。 全连接层:通常在CNN的尾部进行重新拟合,减少特征信息的损失...

devcy的博客 3186

深度学习 Day24——使用Pytorch环境实现mnist手写数字识别

365天深度学习训练营 [第十四周]——本期博客我们将首先学习如何使用Anaconda下载Pytorch,然后使用我们的Pytorch环境搭建一个简单的CNN网络实现mnist手写数字的识别。

北天的博客 7109

第P1周:Pytorch实现mnist手写数字识别

# 第一步:设置硬件设备,有GPU就使用GPU,没有就使用GPU device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') print(device)

差点就差一点点的专栏 1627

Pytorch 项目实战-1: MNIST 手写数字识别

刚接触深度学习的小伙伴们,是不是经常听说 MNIST 数据集和 PyTorch 框架?今天就带大家从零开始,用 PyTorch 实现 MNIST 手写数字识别,轻松迈出深度学习实践的第一步!

m0_75108877的博客 1218

PyTorch 手把手教你实现 MNIST 数据集

Pytorch 手把手教你实现 MNIST 数据集. (超详细)

我是小白呀的博客 1万+

PyTorch实现CNN用于MNIST手写数字识别任务的python完整代码

数据集中的图像经过标准化处理,背景为黑色,数字前景为白色,像素值范围为0-255(通常会归一化至0-1),格式简洁且易于处理,常被用作深度学习入门的“Hello World”级示例(如CNN模型的基础测试),也是评估分类算法性能的基准数据集之一,在PyTorch、TensorFlow等框架中可直接加载调用,适合用于演示数据预处理、模型训练和推理的全流程。MNIST数据集的均值和标准差是预计算好的全局统计量。在第一次卷积操作中,输入是1通道的28×28图像,输出变为16通道的28×28特征图。

搏博的专栏 2133

PyTorch——手写数字识别

目录PyTorch 学习 —— 手写数字识别Ⅰ. 数据读取器1. 训练集2. 验证集和测试集Ⅱ. 搭建网络Ⅲ. 模型训练1. 开始训练2. 模型验证Ⅲ. 模型测试Ⅳ. 绘制图像Ⅴ. 完整代码 PyTorch 学习 —— 手写数字识别   MNIST 数据集,其包含70000 个28×28 的手写数字的数据集,其中又分为60000 个训练样本与10000 个测试样本。 Ⅰ. 数据读取器 import torch from torch import nn from torch import optim fro

原谅我这一生不羁放纵爱自由 2万+

代码生成 | 安时积分法模型搭建

安时积分法是电池电量计量最基础的方法,今天我们用simulink建模的方式做一个安时积分模型,从而更好地理解安时积分的思想也掌握建模的基础操 ​新建文件 打开MATLAB启动simulink新建一个模型文件 定义变量 和手写代码一样,先定义几个后面要用到的变量,在simulink建模时新建变量用Data Store Memory模块。双击填入要定义的变量名,然后在signal attributes赋初值 如此方法新建四个变量current(电流)初值1000mA、tatol_cap(总容量

ningvay的博客 1万+

(保姆教程)Spyder 配置Tensorflow(2.5.0)和keras(2.4.3)

(保姆教程)Spyder 配置Tensorflow(2.5.0)和keras(2.4.3)

qq_43102225的博客 1万+

Pytorch入门——手把手教你MNIST手写数字识别

MNIST手写数字识别教程 要开始带组内的小朋友了,特意出一个Pytorch教程来指导一下 [!] 这里是实战教程,默认读者已经学会了部分深度学习原理,若有不懂的地方可以先停下来查查资料 目录MNIST手写数字识别教程1 什么是MNIST?2 使用Pytorch实现手写数字识别2.1 任务目的2.2 开发环境2.3 实现流程3 具体代码实现3.1 数据预处理部分3.1.1 初始化全局变量3.1.2 构建数据集3.2 训练部分3.2.1 构建模型3.2.2 构建迭代器与损失函数3.2.3 构建训练循环3.2

Elwin的博客 9万+

MAX30102传感器实战:从寄存器配置到Arduino心率血氧监测

本文详细介绍了MAX30102传感器在Arduino平台上的实战应用,从寄存器配置到心率血氧监测的全过程。通过清晰的代码示例和实用技巧,帮助开发者快速实现脉搏血氧仪功能,包括I2C通信、FIFO数据处理及算法实现,适用于健康监测和可穿戴设备开发。

weixin_29182481的博客 511

用PyTorch实现MNIST手写数字识别(最新,非常详细)

1 MNIST数据集(提取码: zm7q )

qq_45588019的博客 13万+

VSCode关联VIVADO编辑Verilog

有时候接手别人的代码,或者从网上找的开源代码,每个人风格不一致,对齐缩进也不一样,阅读起来很累。有没有什么方法能快捷地格式化代码呢。下面我们利用VSCode插件来实现这个需求。Vivado是Xilinx公司提供的逻辑开发平台(之一),如果不喜欢Vivado自带的文本编辑器,可以选择第三方的文本编辑器VSCode。

小王在努力...的博客 7147

【20230415】Ubuntu22.04双屏显示触屏设置,解决触摸点和响应位置不一致的问题

双屏显示时,如果存在一个触摸屏,有可能会出现触摸点和响应位置不一致的问题。我的显示器配置如下:一个34寸,3440*1440;一个22英寸触摸屏,1920*1080。

Creationyang的博客 3213

PyTorch手写数字识别(MNIST数据集)

MNIST 手写数字识别是一个比较简单的入门项目,相当于深度学习中的 Hello World,可以让我们快速了解构建神经网络的大致过程。虽然网上的案例比较多,但还是要自己实现一遍。代码采用 PyTorch 1.0 编写并运行...

Steven的博客 3万+

Cadence OrCAD Capture CIS元器件管理时ERROR(ORCIS-6454): Temporary part number tracking is turned on报错的解决方法

使用Part manager对工程的元器件进行批量管理时,出现如下图所示的ERROR(ORCIS-6454): Temporary part number tracking is turned on报错其解决方法如下。

fydar的博客 3498

用PyTorch实现MNIST手写数字识别(非常详细)

hello大家好!我又来搬文章了!我就不信还有比这更详细的?! MNIST可以说是机器学习入门的hello word了!导师一般第一个就让你研究MNIST,研究透了,也算基本入门了。好的,今天就来扯一扯学一学。 在本文中,我们将在PyTorch中构建一个简单的卷积神经网络,并使用MNIST数据集训练它识别手写数字。在MNIST数据集上训练分类器可以看作是......

xfxuezhang.cn 16万+

【ARM CoreLink 系列 7 -- TZC-400控制器简介】

为了确保内存能够正确识别总线的信号控制位,新增一个TrustZone地址空间控制器(TrustZone Address Space Controller,TZASC)组件来实现对内存地址的安全扩展,将内存区域划分为安全内存区域和非安全内存区域,安全世界可以访问安全内存和非安全内存,而普通世界只能访问非安全内存,如下图所示:图 1-1内存区域的划分是在系统启动时通过配置 TZASC 组件(TZC-400/TZC-380)来实现的。TZC-400由和使能情况;安全访问权限;Base地址;

CodingCos的博客 1632

Untiy之如何实现AI+MR (Pico4u 相机推流MR画面给Server做实时AI图像识别)

本文介绍了基于Pico4U企业版开发AI+MR应用的实现方案。文章详细说明了硬件准备步骤,包括购买企业版设备、申请相机权限和注册管理平台。重点讲解了Unity开发中获取摄像头画面的两种技术方案:通过Overlay直接渲染到Android Surface,或使用API获取图像数据转换为Texture。提供了完整的代码示例和权限配置说明,并揭示了底层通过JNI调用Android原生API的技术原理。该方案适用于带电操作等实习场景,可提升安全性和学习趣味性。

TxNet 1335

Pytorch入门——MNIST手写数字识别代码

MNIST手写数字识别教程 本文仅仅放出该教程的代码 具体教程请看 Pytorch入门——手把手教你MNIST手写数字识别 import torch import torchvision from tqdm import tqdm import matplotlib #By: Elwin https://editor.youkuaiyun.com/md?not_checkout=1&articleId=112980305 class Net(torch.nn.Module): def __init

Elwin的博客 2万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Pytorch|mnist手写数字识别

这段代码的主要功能是将imgs中的前20张图像绘制到一个 2x10 的网格中,每张图像占用一个子图,并使用黑白色调显示图像。# 图片的类别数:设定了分类任务的类别数为 10,通常用于数字分类(如 MNIST 数据集,0-9 的数字分类)。:继承了nn.Module类,表示这是一个 PyTorch 的神经网络模型。:调用父类nn.Module的初始化方法,确保模型的基本结构被正确初始化。这个模型使用了两层卷积层来提取图像特征,并通过池化层减少空间维度。接着,使用全连接层进行分类,输出每个类别的得分。

weixin_52390875的博客 1357

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Pytorch实现mnist手写数字识别

更具体地说,损失函数loss是由模型的所有权重w经过一系列运算得到的,若某个w的requires_grads为True,则w的所有上层参数(后面层的权重w)的.grad_fn属性中就保存了对应的运算,然后在使用。对于一般的CNN网络来说,都是由特征提取网络和分类网络构成,其中特征提取网络用于提取图片的特征,分类网络用于将图片进行分类。函数会遍历模型的所有参数,通过内置方法截断反向传播的梯度流,再将每个参数的梯度值设为0,即上一次的梯度记录被清空。,否则的话,有输入数据,即使不训练,它也会改变权值。

qq_58831463的博客 1549

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

【PyTorch】基于CNN的手写数字识别(在MNIST数据集上训练)

项目场景 简单的学习pytorch、自动求导和神经网络的知识后,我们来练习使用mnist手写数字集训练一个cnn模型。 导入模块 import torch import torch.nn as nn import matplotlib.pyplot as plt from torch.utils.data import DataLoader from torchvision import datasets, transforms matplotlib库用于绘图,如果没有请通过pip命令安装: pip in

XavierJ的博客 1万+
上一篇: 强化学习之CartPole游戏(Q-learning)
下一篇: leetcode 219. Contains Duplicate II (重复数字II)
蓝羽飞鸟
博客等级 码龄8年 1万+粉丝 727原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝羽飞鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值