深度学习

基础知识和各种网络结构实战 ...


pytorch对MNIST分类

  • 深度学习
  • 前言
  • 一、导入第三方库
  • 二、下载MNIST数据集
  • 三、创建神经网络模型
  • 四、训练数据集
  • 五、测试
  • 完整代码
  • 总结

前言

pytorch实现


一、导入第三方库

import torch
from torch.utils.data import DataLoader
import torchvision.datasets as da
import torchvision.transforms as transforms
import torch.nn as nn
from torch.autograd import Variable
import numpy as np

DataLoader为下载MNIST数据集的库

二、下载MNIST数据集

train_dataset=da.MNIST(root='/pymnist', train=True,      transform=transforms.ToTensor(), download=True)
test_dataset=da.MNIST(root='/pymnist',  train=False,    transform=transforms.ToTensor(),  download=True)
#加载数据
train_loader=torch.utils.data.DataLoader(dataset=train_dataset,batch_size=batch_size,shuffle=True)
test_loader=torch.utils.data.DataLoader(dataset=test_dataset,batch_size=batch_size,shuffle=True)

root=’/pymnist’用来选择数据根目录
train=True 用来选择训练数据集
transform=transforms.ToTensor()用来转为tensor
shuffle=True用来打乱数据

三、创建神经网络模型

# 创建神经网络模型
class neural_Net(nn.Module):def __init__(self, input_size, hidden_size, out_put):super(neural_Net, self).__init__()self.layer1 = nn.Linear(input_size, hidden_size)  self.layer2 = nn.Linear(hidden_size, out_put)  def forward(self, x):out = self.layer1(x)  out = torch.relu(out)  out = self.layer2(out)  return outneural_net= neural_Net(input_size, hidden_size, out_put)
print(neural_net)

四、训练数据集

learning_rate = 1e-1
num_epoches = 5
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.SGD(neural_net.parameters(), lr=learning_rate)  # 使用随机梯度下降
for epoch in range(num_epoches):print('current epoch = %d' % epoch)for i, (images, labels) in enumerate(train_loader):  images = Variable(images.view(-1, 28 * 28))labels = Variable(labels)outputs = neural_net(images)  loss = criterion(outputs, labels)  # 计算lossoptimizer.zero_grad()  loss.backward()  optimizer.step()  if i % 100 == 0:print('current loss = %.5f' % loss.item())print('训练完成')

current epoch = 0
current loss = 2.30684
current loss = 0.46591
current loss = 0.35780
current loss = 0.34935
current loss = 0.25930
current loss = 0.26343
current epoch = 1
current loss = 0.30920
current loss = 0.26891
current loss = 0.19270
current loss = 0.35991
current loss = 0.38737
current loss = 0.21648
current epoch = 2
current loss = 0.21281
current loss = 0.23885
current loss = 0.15142
current loss = 0.16950
current loss = 0.13368
current loss = 0.21758
current epoch = 3
current loss = 0.25709
current loss = 0.19445
current loss = 0.13137
current loss = 0.11100
current loss = 0.12425
current loss = 0.22953
current epoch = 4
current loss = 0.12090
current loss = 0.20553
current loss = 0.11617
current loss = 0.09296
current loss = 0.09327
current loss = 0.12168

五、测试

total=0
correct=0
for images,labels in test_loader:images=Variable(images.view(-1,(28*28)))outputs=neural_net(images)_,predicts=torch.max(outputs.data,1)total+=labels.size(0)correct+=(predicts==labels).sum()
print('精度=%.2f'%(100*correct/total))

精度=96.19

完整代码


# 开发时间 ;2021/6/20 0020 22:12
import torch
from torch.utils.data import DataLoader
import torchvision.datasets as da
import torchvision.transforms as transforms
import torch.nn as nn
from torch.autograd import Variable
import numpy as np
batch_size = 100#批大小为100#minist dataset
train_dataset=da.MNIST(root='/pymnist', #选择数据根目录train=True,      #选择训练数据集transform=transforms.ToTensor(),  #转为tensordownload=True)   #从网上下载
test_dataset=da.MNIST(root='/pymnist',  #选择数据根目录train=False,     #选择测试数据集transform=transforms.ToTensor(),  #不考虑使用任何数据预处理download=True)   #从网上下载
#加载数据
train_loader=torch.utils.data.DataLoader(dataset=train_dataset,batch_size=batch_size,shuffle=True)#打乱数据
test_loader=torch.utils.data.DataLoader(dataset=test_dataset,batch_size=batch_size,shuffle=True)#定义神经网络各层
input_size = 784 #28*28
hidden_size = 500
out_put= 10 #输出为10个类别# 创建神经网络模型
class neural_Net(nn.Module):def __init__(self, input_size, hidden_size, out_put):super(neural_Net, self).__init__()self.layer1 = nn.Linear(input_size, hidden_size)  # 从输入到隐藏层的线性处理self.layer2 = nn.Linear(hidden_size, out_put)  # 从隐层到输出层的线性处理def forward(self, x):out = self.layer1(x)  # 输入层到隐藏层的线性计算out = torch.relu(out)  # 隐藏层激活out = self.layer2(out)  # 输出层,注意,输出层直接接lossreturn outneural_net= neural_Net(input_size, hidden_size, out_put)
print(neural_net)# 训练learning_rate = 1e-1  # 学习率
num_epoches = 5
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.SGD(neural_net.parameters(), lr=learning_rate)  # 使用随机梯度下降
for epoch in range(num_epoches):print('current epoch = %d' % epoch)for i, (images, labels) in enumerate(train_loader):  # 利用enumerate取出一个可迭代对象的内容images = Variable(images.view(-1, 28 * 28))labels = Variable(labels)outputs = neural_net(images)  # 将数据集传入网络做前向计算loss = criterion(outputs, labels)  # 计算lossoptimizer.zero_grad()  # 在做反向传播之前先清除下网络状态loss.backward()  # loss反向传播optimizer.step()  # 更新参数if i % 100 == 0:print('current loss = %.5f' % loss.item())print('finished training')#测试集准确度测试
#预测
total=0
correct=0
for images,labels in test_loader:images=Variable(images.view(-1,(28*28)))outputs=neural_net(images)_,predicts=torch.max(outputs.data,1)total+=labels.size(0)correct+=(predicts==labels).sum()
print('精度=%.2f'%(100*correct/total))

总结

期待大家和我交流,留言或者私信,一起学习,一起进步!

pytorch对MNIST分类相关推荐

  1. 基于pytorch后量化(mnist分类)---浮点训练vs多bit后量化vs多bit量化感知训练效果对比

    基于pytorch后量化(mnist分类)-浮点训练vs多bit后量化vs多bit量化感知训练效果对比 代码下载地址:下载地址 试了 bit 数为 1-8 的准确率,得到下面这张折线图: 发现,当 b ...

  2. 基于pytorch的MNIST数据集的四层CNN,测试准确率99.77%

    基于pytorch的MNIST数据集的四层CNN,测试准确率99.77% MNIST数据集 环境配置 文件存储结构 代码 引入库 调用GPU 初始化变量 导入数据集并进行数据增强 导入测试集 加载测试 ...

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

    ​​​​​Keras版本: Keras入门级MNIST手写数字识别超级详细教程 2022/4/17 更新修复下代码.完善优化下文章结构,文末提供一个完整版代码. 可以在这里下载源码文件(免积分): 用 ...

  4. LESSON 10.110.210.3 SSE与二分类交叉熵损失函数二分类交叉熵损失函数的pytorch实现多分类交叉熵损失函数

    在之前的课程中,我们已经完成了从0建立深层神经网络,并完成正向传播的全过程.本节课开始,我们将以分类深层神经网络为例,为大家展示神经网络的学习和训练过程.在介绍PyTorch的基本工具AutoGrad ...

  5. pytorch实现文本分类_使用变形金刚进行文本分类(Pytorch实现)

    pytorch实现文本分类 'Attention Is All You Need' "注意力就是你所需要的" New deep learning models are introd ...

  6. python数据集的预处理_关于Pytorch的MNIST数据集的预处理详解

    关于Pytorch的MNIST数据集的预处理详解 MNIST的准确率达到99.7% 用于MNIST的卷积神经网络(CNN)的实现,具有各种技术,例如数据增强,丢失,伪随机化等. 操作系统:ubuntu ...

  7. Pytorch实现mnist手写数字识别

    2020/6/29 Hey,突然想起来之前做的一个入门实验,用pytorch实现mnist手写数字识别.可以在这个基础上增加网络层数,或是尝试用不同的数据集,去实现不一样的功能. Mnist数据集如图 ...

  8. Pytorch搭建常见分类网络模型------VGG、Googlenet、ResNet50 、MobileNetV2(4)

    接上一节内容:Pytorch搭建常见分类网络模型------VGG.Googlenet.ResNet50 .MobileNetV2(3)_一只小小的土拨鼠的博客-CSDN博客 mobilenet系列: ...

  9. pytorch训练MNIST

    本文记录了pytorch训练MNIST数据集的过程,通过本文可熟悉pytorch训练的大体操作过程. 一.导入各种模块 import torch import torch.nn as nn impor ...

最新文章

  1. Google Colab使用详细教程
  2. 记一次面试腾讯的奇葩经历
  3. 数据库的两个好帮手:pagehack和pg_xlogdump
  4. 使用Gitosis搭建Git服务器
  5. Surprise官方文档练习
  6. @WebListener 注解方式实现监听(eclipse和idea)
  7. 机器学习:残差学习、RNN、GAN、迁移学习、知识蒸馏
  8. 微擎不现实数组_Java这个类,大概就和现实中吃饭一样常见
  9. 1stopt(应用集锦)
  10. PV-RCNN: Point-Voxel Feature Set Abstraction for 3D Object Detection阅读
  11. 修改主分区表给U盘分区
  12. 可以插卡的ipad_可以插卡的ipad是几代
  13. The page has expired due to inactivity Please refresh and try again
  14. 一个域名可以对应多个ip地址的案例
  15. jupyter输出为html隐藏代码,在jupyter noteb中隐藏代码
  16. 【课件整理复习】第十一章 图像识别与文字处理
  17. 会python_20小时学会Python,可能吗?
  18. 职称计算机80分合格,达江发话:这样备考中级职称 考不了80分算我输!
  19. 二分查找详解(Java)
  20. 社交网络分析:网络中心性

热门文章

  1. Android 视频壁纸
  2. 工作流流程编辑器的几种解决方案
  3. C# Word 查找替换操作
  4. 《跳出你的思维陷阱》读书笔记
  5. 中职学校计算机专业展板,职教中心课改展板文字内容
  6. C# chart图表的简单使用+Tooltip的信息提示
  7. virtualbox安装windows系统,开机时出现fatal:No bootable medium found, System halted的错误。
  8. 【SCAU 10新生赛】 9511 跑跑卡丁车I 数论
  9. java手电筒_java – 用不同的模式在android中打开手电筒
  10. jquery 点击事件 点击两次才有效