Pytorch卷积神经网络识别手写数字集
卷积神经网络目前被广泛地用在图片识别上, 已经有层出不穷的应用, 如果你对卷积神经网络充满好奇心,这里为你带来pytorch实现cnn一些入门的教程代码
#首先导入包
import torch
from torch.autograd import Variable
import torch.nn as nn
import torchvision
import torch.utils.data as Data
#一、数据准备
#训练数据:用了torchvision.datasets.MNIST,root是文件路径,train为True(这是训练数据),transform是把图像数据转换为张量,download(如果本地已有该文件选择false,没有就选择true)
train_data = torchvision.datasets.MNIST(root='./mnist/',train=True,transform=torchvision.transforms.ToTensor(),download=False)
#训练数据:同上,train为False(这是测试数据)
test_data = torchvision.datasets.MNIST(root='./mnist/',train=False)
# "训练数据加载器":dataset为训练数据,shuflle为打乱数据的顺序,batch_size是让数据50个为一组
train_loader = Data.DataLoader(dataset=train_data,shuffle=True,batch_size=50)
test_data.test_data.size()
torch.Size([10000, 28, 28])
#测试数据 test_data下的test_data为测试数据,因为下面conv2d输入的为4维数据,所以此处用torch.unsqueeze升维
test_x = Variable(torch.unsqueeze(test_data.test_data,dim=1),volatile=True).type(torch.FloatTensor)
#测试数据目标值
test_y = test_data.test_labels
#二、实现模型
class CNN(nn.Module):
def __init__(self):
super(CNN,self).__init__()
#conv2d参数:输入1维,输出16维,5个卷积核(kernel),步长(stride)为1,padding是2(如果想要 con2d 出来的图片长宽没有变化, padding=(kernel_size-1)/2 当 stride=1)
self.conv1 = nn.Sequential(nn.Conv2d(1,16,5,1,2),nn.ReLU(),nn.MaxPool2d(2))
self.conv2 = nn.Sequential(nn.Conv2d(16,32,5,1,2),nn.ReLU(),nn.MaxPool2d(2))
#Linear参数:输入维数,输出分的种类数
self.out = nn.Linear(32*7*7,10)
def forward(self,x):
x1 = self.conv1(x)
x2 = self.conv2(x1)
#这里给x3降为2维可以让linear函数使用
x3 = x2.view(x2.size(0),-1)
out = self.out(x3)
return out
#自动调整参数,最优化模型
cnn = CNN()
optimizer = torch.optim.Adam(cnn.parameters(),lr = 0.02)
loss_func = nn.CrossEntropyLoss()
#三、训练模型
for step,(x,y) in enumerate(train_loader):
x = Variable(x)
y = Variable(y)
out = cnn(x)
loss = loss_func(out,y)
#以下为固定操作,为了训练每一条数据,不断调整参数
optimizer.zero_grad()
loss.backward()
optimizer.step()
#四、测试
predict = cnn(test_x[:10])
res = torch.max(predict,1)[1]
res #测试数据
tensor([7, 2, 1, 0, 4, 1, 4, 9, 9, 9])
test_y[:10] #真实数据
tensor([7, 2, 1, 0, 4, 1, 4, 9, 5, 9])
#在这里我们发现前十个数据分类准确率达到90
Pytorch卷积神经网络识别手写数字集的更多相关文章
- 如何用卷积神经网络CNN识别手写数字集?
前几天用CNN识别手写数字集,后来看到kaggle上有一个比赛是识别手写数字集的,已经进行了一年多了,目前有1179个有效提交,最高的是100%,我做了一下,用keras做的,一开始用最简单的MLP, ...
- Tensorflow搭建卷积神经网络识别手写英语字母
更新记录: 2018年2月5日 初始文章版本 近几天需要进行英语手写体识别,查阅了很多资料,但是大多数资料都是针对MNIST数据集的,并且主要识别手写数字.为了满足实际的英文手写识别需求,需要从训练集 ...
- PyTorch基础——使用卷积神经网络识别手写数字
一.介绍 实验内容 内容包括用 PyTorch 来实现一个卷积神经网络,从而实现手写数字识别任务. 除此之外,还对卷积神经网络的卷积核.特征图等进行了分析,引出了过滤器的概念,并简单示了卷积神经网络的 ...
- Python实现神经网络算法识别手写数字集
最近忙里偷闲学习了一点机器学习的知识,看到神经网络算法时我和阿Kun便想到要将它用Python代码实现.我们用了两种不同的方法来编写它.这里只放出我的代码. MNIST数据集基于美国国家标准与技术研究 ...
- 使用TensorFlow的卷积神经网络识别手写数字(3)-识别篇
from PIL import Image import numpy as np import tensorflow as tf import time bShowAccuracy = True # ...
- 使用TensorFlow的卷积神经网络识别手写数字(2)-训练篇
import numpy as np import tensorflow as tf import matplotlib import matplotlib.pyplot as plt import ...
- 使用TensorFlow的卷积神经网络识别手写数字(1)-预处理篇
功能: 将文件夹下的20*20像素黑白图片,根据重心位置绘制到28*28图片上,然后保存.经过预处理的图片有利于数字的准确识别.参见MNIST对图片的要求. 此处可下载已处理好的图片: https:/ ...
- 李宏毅 Keras手写数字集识别(优化篇)
在之前的一章中我们讲到的keras手写数字集的识别中,所使用的loss function为‘mse’,即均方差.那我们如何才能知道所得出的结果是不是overfitting?我们通过运行结果中的trai ...
- TensorFlow卷积神经网络实现手写数字识别以及可视化
边学习边笔记 https://www.cnblogs.com/felixwang2/p/9190602.html # https://www.cnblogs.com/felixwang2/p/9190 ...
随机推荐
- 《C++ Primer》学习总结;兼论如何使用'书'这种帮助性资料
6.25~ 6.27,用了3天翻了一遍<C++ Primer>. ▶书的 固有坏处 一句话: 代码比 文字描述 好看多了.————> 直接看习题部分/ 看demo就行了 看文字在描述 ...
- maven项目整合SSM配置log4j, 实现控制台打印SQL语句
在原有项目正常启动的情况下, 实现在控制台打印mapper包下SQL语句. 1.在pom.xml配置文件中添加两个依赖(缺一不可) <!--日志包--> <dependency> ...
- C# 获取系统SysWOW64的方法
string path = Environment.GetFolderPath(Environment.SpecialFolder.SystemX86); 64位系统获取的SysWOW64 ,32位获 ...
- 【MySQL】数据库事务深入分析
一.前言 只有InnoDB引擎支持事务,下边的内容均以InnoDB引擎为默认条件 二.常见的并发问题 1.脏读 一个事务读取了另一个事务未提交的数据 2.不可重复读 一个事务对同一数据的读取结果前后不 ...
- Cat搭建遇坑记
1. Cat搭建遇坑记 1.1. 报错 服务端启动 Unable to get component: class com.dianping.cat.analysis.TcpSocketReceiver ...
- Pandas 之 描述性统计案例
认识 jupyter地址: https://nbviewer.jupyter.org/github/chenjieyouge/jupyter_share/blob/master/share/panda ...
- docker的小技巧记录(如果使用了更多会继续添加)
docker小技巧 复制本地sql脚本到docker容器mysql中进行使用 # 找到容器 docker ps # 复制文件 cp ./xxx.sql container-id:/tmp/ # 进入容 ...
- git远程上的分支到本地
先想一个自己要在本地新建的分支名称,qianjinyan git checkout -b qianjinyan origin/SELLER-2248-1018 git branch 查看分支 git ...
- Element布局实现日历布局
1.基于Bootstrap的栅格布局 <div id="home" style="margin-top: 60px;"> <div class ...
- Java精通并发-Lock与synchronized关键字在底层的区别及实例分析
在上两次中已经将Lock这个接口的整个官方说明进行了阅读,这次来了解一下它的一个非常重要的实现类: 啥叫“可重入”呢?其实是指一个线程已经拿到了锁,然后该线程还能再次获取这把锁,接下来在了解它之前先用 ...