都说MNIST相当于机器学习界的Hello World。最近加入实验室,导师给我们安排了一个任务,但是我才刚刚入门呐!!没办法,只能从最基本的学起。

  Pytorch是一套开源的深度学习张量库。或者我倾向于把它当成一个独立的深度学习框架。为了写这么一个"Hello World"。查阅了不少资料,也踩了不少坑。不过同时也学习了不少东西,下面我把我的代码记录下来,希望能够从中受益更多,同时帮助其他对Pytorch感兴趣的人。代码的注释中有不对的地方欢迎批评指正。

  代码进行了注释,应该很方便阅读。 dependences: numpy torch torchvision python3 使用pip安装即可。

 # encoding: utf-8
import torch
import torch.nn as nn
import torch.nn.functional as F #加载nn中的功能函数
import torch.optim as optim #加载优化器有关包
import torch.utils.data as Data
from torchvision import datasets,transforms #加载计算机视觉有关包
from torch.autograd import Variable BATCH_SIZE = 64 #加载torchvision包内内置的MNIST数据集 这里涉及到transform:将图片转化成torchtensor
train_dataset = datasets.MNIST(root='~/data/',train=True,transform=transforms.ToTensor(),download=True)
test_dataset = datasets.MNIST(root='~/data/',train=False,transform=transforms.ToTensor()) #加载小批次数据,即将MNIST数据集中的data分成每组batch_size的小块,shuffle指定是否随机读取
train_loader = Data.DataLoader(dataset=train_dataset,batch_size=BATCH_SIZE,shuffle=True)
test_loader = Data.DataLoader(dataset=test_dataset,batch_size=BATCH_SIZE,shuffle=False) #定义网络模型亦即Net 这里定义一个简单的全连接层784->10
class Model(nn.Module):
def __init__(self):
super(Model,self).__init__()
self.linear1 = nn.Linear(784,10) def forward(self,X):
return F.relu(self.linear1(X)) model = Model() #实例化全连接层
loss = nn.CrossEntropyLoss() #损失函数选择,交叉熵函数
optimizer = optim.SGD(model.parameters(),lr = 0.1)
num_epochs = 5 #以下四个列表是为了可视化(暂未实现)
losses = []
acces = []
eval_losses = []
eval_acces = [] for echo in range(num_epochs):
train_loss = 0 #定义训练损失
train_acc = 0 #定义训练准确度
model.train() #将网络转化为训练模式
for i,(X,label) in enumerate(train_loader): #使用枚举函数遍历train_loader
X = X.view(-1,784) #X:[64,1,28,28] -> [64,784]将X向量展平
X = Variable(X) #包装tensor用于自动求梯度
label = Variable(label)
out = model(X) #正向传播
lossvalue = loss(out,label) #求损失值
optimizer.zero_grad() #优化器梯度归零
lossvalue.backward() #反向转播,刷新梯度值
optimizer.step() #优化器运行一步,注意optimizer搜集的是model的参数 #计算损失
train_loss += float(lossvalue)
#计算精确度
_,pred = out.max(1)
num_correct = (pred == label).sum()
acc = int(num_correct) / X.shape[0]
train_acc += acc losses.append(train_loss / len(train_loader))
acces.append(train_acc / len(train_loader))
print("echo:"+' ' +str(echo))
print("lose:" + ' ' + str(train_loss / len(train_loader)))
print("accuracy:" + ' '+str(train_acc / len(train_loader)))
eval_loss = 0
eval_acc = 0
model.eval() #模型转化为评估模式
for X,label in test_loader:
X = X.view(-1,784)
X = Variable(X)
label = Variable(label)
testout = model(X)
testloss = loss(testout,label)
eval_loss += float(testloss) _,pred = testout.max(1)
num_correct = (pred == label).sum()
acc = int(num_correct) / X.shape[0]
eval_acc += acc eval_losses.append(eval_loss / len(test_loader))
eval_acces.append(eval_acc / len(test_loader))
print("testlose: " + str(eval_loss/len(test_loader)))
print("testaccuracy:" + str(eval_acc/len(test_loader)) + '\n')

运行后的结果如下:

  我们在上面的代码中,将图片对应的Pytorchtensor展平,并通过一个全连接层,仅仅是这样就达到了90%以上的准确率。如果使用卷积层,正确率有望达到更高。

  代码并不完备,还可以增加visualize和predict功能,等我学到更多知识后,有待后续添加。  

PytorchMNIST(使用Pytorch进行MNIST字符集识别任务)的更多相关文章

  1. R︱Softmax Regression建模 (MNIST 手写体识别和文档多分类应用)

    本文转载自经管之家论坛, R语言中的Softmax Regression建模 (MNIST 手写体识别和文档多分类应用) R中的softmaxreg包,发自2016-09-09,链接:https:// ...

  2. 一个简单的TensorFlow可视化MNIST数据集识别程序

    下面是TensorFlow可视化MNIST数据集识别程序,可视化内容是,TensorFlow计算图,表(loss, 直方图, 标准差(stddev)) # -*- coding: utf-8 -*- ...

  3. 深度学习-mnist手写体识别

    mnist手写体识别 Mnist数据集可以从官网下载,网址: http://yann.lecun.com/exdb/mnist/ 下载下来的数据集被分成两部分:55000行的训练数据集(mnist.t ...

  4. Pytorch实现MNIST手写数字识别

    Pytorch是热门的深度学习框架之一,通过经典的MNIST 数据集进行快速的pytorch入门. 导入库 from torchvision.datasets import MNIST from to ...

  5. Pytorch CNN网络MNIST数字识别 [超详细记录] 学习笔记(三)

    目录 1. 准备数据集 1.1 MNIST数据集获取: 1.2 程序部分 2. 设计网络结构 2.1 网络设计 2.2 程序部分 3. 迭代训练 4. 测试集预测部分 5. 全部代码 1. 准备数据集 ...

  6. 基于PyTorch实现MNIST手写字识别

    本篇不涉及模型原理,只是分享下代码.想要了解模型原理的可以去看网上很多大牛的博客. 目前代码实现了CNN和LSTM两个网络,整个代码分为四部分: Config:项目中涉及的参数: CNN:卷积神经网络 ...

  7. 全网最详细最好懂 PyTorch CNN案例分析 识别手写数字

    先来看一下这是什么任务.就是给你手写数组的图片,然后识别这是什么数字: dataset 首先先来看PyTorch的dataset类: 我已经在从零学习pytorch 第2课 Dataset类讲解了什么 ...

  8. MNIST数字识别问题

    摘自<Tensorflow:实战Google深度学习框架> import tensorflow as tf from tensorflow.examples.tutorials.mnist ...

  9. CNN算法解决MNIST数据集识别问题

    网络实现程序如下 import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data # 用于设置将记 ...

随机推荐

  1. ShoneSharp语言(S#)软件更新13.6版

    ShoneSharp语言(S#)编辑解析运行器 软件更新13.6版 作者:Shone 今天把近期发现的各种软件问题做了修改,并发布新版ShoneSharp.13.6.exe,最新的网盘链接为: htt ...

  2. SpringBoot2.1电商通用(微信+支付宝)支付系统实战

    『课程目录』: ├─第10章 全模块电商系统之商品模块 │      10-1_商品列表-上.mp4 │      10-2_商品列表-中.mp4 │      10-3_商品列表-下.mp4 │  ...

  3. vue路由中使用keep-alive 以及activated和deactivated 钩子

    本次只是记录下开发中碰到的问题. 最近做一个活动页面,涉及到角色和权限的问题,需要跳转很多页面,于是vue-router走起,顺便keep-alive也用起来了,嗯,跳转的很爽,但是一个详情页面组件, ...

  4. 【JVM】堆体系结构及其内存调优

    堆体系结构 一个JVM实例只存在一个堆内存,堆内存的大小是可调节的.类加载器读取类文件后,需要把类.方法.常量.变量放在堆内存中,保存所有引用类型的真实信息,以方便执行器指向,堆内存分为三个部分:年轻 ...

  5. 小谢第6问:js中,filter函数是怎么使用的

    数组的常用方法filter,今天在做数组筛选的时候用到需要将有重复的数组去除,因此用到这个函数,主要用到-- 选择需要的属性,最终留下想要的数组,如果刚开始的话可以看下下面代码 let nums = ...

  6. 一文带你了解js数据储存及深复制(深拷贝)与浅复制(浅拷贝)

    背景 在日常开发中,偶尔会遇到需要复制对象的情况,需要进行对象的复制. 由于现在流行标题党,所以,一文带你了解js数据储存及深复制(深拷贝)与浅复制(浅拷贝) 理解 首先就需要理解 js 中的数据类型 ...

  7. (二)用less+gulp+requireJs 搭建项目(gulp)

    gulp是自动化构建工具,基于node,需要安装node,如果你不了解node也没关系,先跟着来一遍再去了解node也不迟~ 首先去node官网下载安装包 1.新建项目文件夹 在目录下shift+右键 ...

  8. Java实现 LeetCode 728 自除数(暴力)

    728. 自除数 自除数 是指可以被它包含的每一位数除尽的数. 例如,128 是一个自除数,因为 128 % 1 == 0,128 % 2 == 0,128 % 8 == 0. 还有,自除数不允许包含 ...

  9. Java实现 蓝桥杯VIP 算法训练 Hanoi问题

    问题描述 如果将课本上的Hanoi塔问题稍做修改:仍然是给定N只盘子,3根柱子,但是允许每次最多移动相邻的M只盘子(当然移动盘子的数目也可以小于M),最少需要多少次? 例如N=5,M=2时,可以分别将 ...

  10. Java实现 LeetCode 309 最佳买卖股票时机含冷冻期

    309. 最佳买卖股票时机含冷冻期 给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 .​ 设计一个算法计算出最大利润.在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股 ...