深度学习(3)手写数字识别问题
深度学习(3)手写数字识别问题
- 1. 问题归类
- 2. 数据集
- 3. Image
- 4. Input and Output
- 5. Regression VS Classification
- 6. Computation Graph
- 7. 两个问题
- 8. Particularly
- 9. 如何训练模型?→\to→ Loss
- 10. 总结
- 11. Deep Learning?
- 12. Classification Procedure
- 13. We need TensorFlow
- 14. Next
1. 问题归类
Discrete Prediction(离散值的预测)
- y=w∗x+by=w*x+by=w∗x+b
- [up, left, down, right]
- [dog, cat, whale, bird, …]
手写数字识别问题属于离散值的预测。
2. 数据集
- MNIST
- 7000 images per category
- train/test splitting: 60k vs 10k
3. Image
- [28, 28, 1]
图片是由28行×28列,共784个像素点组成,[0, 255]代表图片像素的灰度值,其中0代表纯白色,255代表纯黑色,1代表每个像素点的灰度值,也就是每个像素点只有1个维度,就是其灰度值。 - →\to→ [784]
将28×28的数据变为一维,将第二行的像素点拼接到一行后,后面26行同理,这样一张图片就变为了拥有784个元素的一维数据。
4. Input and Output
(1) 输入
x:[b,784]x:[b,784]x:[b,784]
输入是[b, 784],b可以理解为共有多少张图片,784表示每张图片有784个像素点。
(2) 编码方式
- dog=0, cat=1, fish=2, …
缺点: 不确定性高,例如要是预测值为1.5,就会产生判断失误。 - dog = [1, 0, 0, …],其中“1”表示该预测值为“dog”的概率,“0”表示该预测值为“cat”的概率,…,这些概率和为1。
cat = [0, 1, 0, …]
fish = [0, 0, 1, …]
这种编码方式被称为one-hot编码。
5. Regression VS Classification
(1) 模型
- y=x∗x+by=x*x+by=x∗x+b
- y∈Rdy∈R^dy∈Rd
(2) 输出
- out=X@W+bout=X@W+bout=X@W+b
- out:[0.1,0.8,0.02,0.08]out:[0.1,0.8,0.02,0.08]out:[0.1,0.8,0.02,0.08]
(3) 预测
- pred=argmax(out)pred=argmax(out)pred=argmax(out)
- pred:1pred:1pred:1
- label:2label:2label:2
6. Computation Graph
- out=X@W+bout=X@W+bout=X@W+b
- X:[b,784]X:[b,784]X:[b,784]
- W:[784,10]W:[784,10]W:[784,10]
- b:[10]b:[10]b:[10]
7. 两个问题
(1) It’s Linear!
- out=X@W+bout=X@W+bout=X@W+b
- →\to→
- out=f(X@W+b)out=f(X@W+b)out=f(X@W+b)
- out=relu(X@W+b)out=relu(X@W+b)out=relu(X@W+b)
(2) It’s too simple!
- out=relu(X@W+b)out=relu(X@W+b)out=relu(X@W+b)
- →\to→
- h1=relu(X@W1+b1)h_1=relu(X@W_1+b_1)h1=relu(X@W1+b1)
- h2=relu(h1@W2+b2)h_2=relu(h_1@W_2+b_2)h2=relu(h1@W2+b2)
- out=relu(h2@W3+b3)out=relu(h_2@W_3+b_3)out=relu(h2@W3+b3)
8. Particularly
(1)X:[v1,v2,…,v784]X:[v_1,v_2,…,v_784]X:[v1,v2,…,v784]
- X:[1,784]
(2) h1=relu(X@W1+b1)h_1=relu(X@W_1+b_1)h1=relu(X@W1+b1)
- W_1:[784,512]
→[1,784]@[784,512]+[512]=[1,512]+[512]=[1,512]\to [1,784]@[784,512]+[512]=[1,512]+[512]=[1,512]→[1,784]@[784,512]+[512]=[1,512]+[512]=[1,512] - b1:[1,512]b_1:[1,512]b1:[1,512]
(3) h2=relu(h1@W2+b2)h_2=relu(h_1@W_2+b_2)h2=relu(h1@W2+b2)
- W_2:[512,256]
→[1,512]@[512,256]+[256]=[1,256]+[256]=[1,256]\to [1,512]@[512,256]+[256]=[1,256]+[256]=[1,256]→[1,512]@[512,256]+[256]=[1,256]+[256]=[1,256] - b2:[1,256]b_2:[1,256]b2:[1,256]
(4) out=relu(h2@W3+b3)out=relu(h_2@W_3+b_3)out=relu(h2@W3+b3)
- W_3:[256,10]
→[1,256]@[256,10]+[10]=[1,10]+[10]=[1,10]\to [1,256]@[256,10]+[10]=[1,10]+[10]=[1,10]→[1,256]@[256,10]+[10]=[1,10]+[10]=[1,10] - b3:[1,10]b_3:[1,10]b3:[1,10]
从以上计算过程可以看出,神经网络其实是一个降维的过程,图片由原来的[1,784][1,784][1,784]降为[1,512][1,512][1,512],再降为[1,256][1,256][1,256],最后降为[1,10][1,10][1,10]。
→[0,0,0.01,0.1,0.8,0,…]\to [0,0,0.01,0.1,0.8,0,…]→[0,0,0.01,0.1,0.8,0,…]
根据以上输出可以判断这张图片为“5”的概率最大,所以这张图片的预测值为“5”。
9. 如何训练模型?→\to→ Loss
- out:[1,10]
→\to→ - Y/label: 0~9
- eg.: 1 →\to→ [0,1,0,0,0,0,0,0,0,0]
- eg.: 3 →\to→ [0,0,0,1,0,0,0,0,0,0]
→\to→
- Euclidean Distance(欧式距离): out→Labelout \to Labelout→Label
- MSE,即∑(y−out)2\sum(y-out)^2∑(y−out)2
10. 总结
- out=relu{relu{relu[X@W1+b1]@W2+b2}@W3+b3}out=relu\{relu\{relu[X@W_1+b_1]@W_2+b_2\}@W_3+b_3\}out=relu{relu{relu[X@W1+b1]@W2+b2}@W3+b3}
- pred=argmax(out)pred=argmax(out)pred=argmax(out)
- loss=MSE(out,label)loss=MSE(out,label)loss=MSE(out,label)
- minimizelossminimize lossminimizeloss
- [W1′,b1′,W2′,b2′,W3′,b3′][W_1',b_1',W_2',b_2',W_3',b_3'][W1′,b1′,W2′,b2′,W3′,b3′]
11. Deep Learning?
- We have not seen it.
- But we already master it.
- We will show you It’s(almost)Deep Learning!
12. Classification Procedure
- Step1. Compute h1,h2,outh_1,h_2,outh1,h2,out
- Step2. Compute LossLossLoss
- Step3. Compute gradient and update[W1′,b1′,W2′,b2′,W3′,b3′][W_1',b_1',W_2',b_2',W_3',b_3'][W1′,b1′,W2′,b2′,W3′,b3′]
- Step4. Loop
13. We need TensorFlow
- 数据量庞大;
- TensorFlow计算和处理更快。
14. Next
- Step1. have fun on MNIST classification
- Step2. and we learn TensorFlow
- Step3. and we implement Step1. by ourselves!
参考文献:
[1] 龙良曲:《深度学习与TensorFlow2入门实战》
深度学习(3)手写数字识别问题相关推荐
- 基于深度学习的手写数字识别、python实现
基于深度学习的手写数字识别.python实现 一.what is 深度学习 二.加深层可以减少网络的参数数量 三.深度学习的手写数字识别 一.what is 深度学习 深度学习是加深了层的深度神经网络 ...
- 基于深度学习的手写数字识别Matlab实现
基于深度学习的手写数字识别Matlab实现 1.网络设计 2. 训练方法 3.实验结果 4.实验结果分析 5.结论 1.网络设计 1.1 CNN(特征提取网络+分类网络) 随着深度学习的迅猛发展,其应 ...
- 03_深度学习实现手写数字识别(python)
本次项目采用了多种模型进行测试,并尝试策略来提升模型的泛化能力,最终取得了99.67%的准确率,并采用pyqt5来制作可视化GUI界面进行呈现.具体代码已经开源. 代码详情见附录 1简介 早在1998 ...
- 【深度学习】手写数字识别Tensorflow2实验报告
实验一:手写数字识别 一.实验目的 利用深度学习实现手写数字识别,当输入一张手写图片后,能够准确的识别出该图片中数字是几.输出内容是0.1.2.3.4.5.6.7.8.9的其中一个. 二.实验原理 ( ...
- Python实现深度学习MNIST手写数字识别(单文件,非框架,无需GPU,适合初学者)
注: 本文根据阿卡蒂奥的Python深度学习博客文章代码进行调整,修复了少量问题,原文地址:https://blog.csdn.net/akadiao/article/details/78175737 ...
- 基于深度学习的手写数字识别算法Python实现
摘 要 深度学习是传统机器学习下的一个分支,得益于近些年来计算机硬件计算能力质的飞跃,使得深度学习成为了当下热门之一.手写数字识别更是深度学习入门的经典案例,学习和理解其背后的原理对于深度学习的理解有 ...
- Python基于深度学习的手写数字识别
Python基于深度学习的手写数字识别 1.代码的功能和运行方法 2. 网络设计 3.训练方法 4.实验结果分析 5.结论 1.代码的功能和运行方法 代码可以实现任意数字0-9的识别,只需要将图片载入 ...
- 深度学习数字仪表盘识别_深度学习之手写数字识别项目(Sequential方法amp;Class方法进阶版)...
此项目使用LeNet模型针对手写数字进行分类.项目中我们分别采用了顺序式API和子类方法两种方式构建了LeNet模型训练mnist数据集,并编写了给图识物应用程序用于手写数字识别. 一.LeNet模型 ...
- 深度学习day04-MNIST手写数字识别与模型使用
本文大概分为以下几个部分:手写数字识别原理(不强相关).具体代码实现(算上import和空行一共50行代码不到).训练出来的模型怎么使用. 目录 一.手写数字识别原理 二.具体代码实现 三.训练出来的 ...
- 深度学习(手写数字识别)
本程序采用百度paddlepaddle深度学习框架,并在百度AI Studio平台上运行 目录 1 实验内容 2 实验流程 3 DNN模型 4 LeNet 模型 4.1 LeNet-1模型 4.2 L ...
最新文章
- vue组件的基本使用:入门示例
- Mpvue微信小程序时间消耗进度条组件的实现
- 为什么计算机语言都是英语,编程为什么都是英语 编程为什么没有汉语
- linux上如何查看具体的命令属于哪个安装包
- systemctl/systemd 常用命令
- 西门子step7安装注册表删除_如何完全删除step 7
- DOS命令教程 第二章——ping命令
- Windows系统怎么换硬盘图标
- 无线网首选dns服务器怎么设置,怎么设置无线路由器dns
- DedeCMS二次开发 - 文件结构了解
- lol服务器崩溃补偿领取中心,LOL官方: 服务器崩溃补偿! 全服再次免费赠送皮肤一款!...
- LiveRTMP推送RTSP视频源进行RTMP直播
- 《H打飞机》技術支持網址
- StarUML 3.2.2
- uap 自动生成场景代码
- 计算机控制的电子点火系统,计算机控制点火系统的组成及工作原理.ppt
- C++信息学奥赛题目归类:初赛普及组阅读程序写结果题
- 盖娅互娱测试工程师校招一面面经
- java js 打开摄像头_基于HTML5实现的超酷摄像头(HTML5 webcam)拍照功能 - photobooth.js...
- access通配符模糊查找_在Access 2010中使用通配符条目
热门文章
- ASP怎样定义应用主题服务器,ASP.NET 4权威指南 目录
- java动态菜单显示实现,java – 为Spring MVC / AOP应用程序实现动态菜单
- C++11保护共享数据的其他方法
- java复用类_java复用类
- linux 内核 报错,根据epc定位linux内核报错.pdf
- js中load载入html页面,使用jquery的load方法加载html页面,但是html引入的js不生效
- gradle项目搭建
- 使用Python计算指定目录md5,根据md5找查到相同的文件并打印
- MAC下搭建java的开发环境
- common_test使用注意事项