最近因为学校事情比较多,也开始准备研究出一些深度学习方面的教程,但总被一些大大小小的原因在往后拖进度,这期用Python写一篇从零到一的手写体识别算法实战课来教各位如何入门深度学习。


准备数据集

首先准备一个 mnist 数据集。
这是下载地址

四个数据集分别是训练图集、训练结果、测试图集、测试结果。
下载后存到一个文件夹中备用。


Tensorflow 数据流图框架

首先先调用Python第三方库,将数据集全部调用进程序
(在这里使用 Tensorflow2.3.0 以及 scipy==1.2.1)

import tensorflow.compat.v1 as tf
tf.disable_v2_behavior() # 这两句话是为了避免 Tensorflow 1.x与2.x的区别而引起的错误
from tensorflow.examples.tutorials.mnist import input_data
import numpy as np
import os
import scipy.miscmnist = input_data.read_data_sets('mnist',one_hot=True)

先看一下训练集的图片的结构

print(mnist.train.images.shape)
# -> (55000, 784) 五万五千张图片,每张图片含有784向量
print(mnist.train.labels.shape)
# -> (55000, 10) 五万五千张图片,由0到9展示的十维向量
print(mnist.train.labels[0,:])
# -> [0. 0. 0. 0. 0. 0. 0. 1. 0. 0.] 十个数字组成,表示第一个数为7

标出图片的位置以及不存在则创建

dir_path = 'mnist/data/'
if not os.path.exists(dir_path):os.makedirs(dir_path)

提取其中五张训练图作为实验,检查训练结果与训练图片的真实对应。

for i in range(5):image_array = mnist.train.images[i, :] # 提取第i张图片image_array = image_array.reshape(28,28) # 将图片转换为28*28像素的图片image_file = dir_path + 'mnist_train %d.jpg' % i # 放置图片的保存位置和图片名称scipy.misc.toimage(image_array,cmin=0.0,cmax=1.0).save(image_file) # 下载图片到本地,基本的图片格式设置

我们在for循环里面观察一下image和label对应的输出。看看训练集的每张图片是否对应。

 image_lable = mnist.train.labels[i, :]label = np.argmax(image_lable)print("image_train %d label is : %d" %(i,label))

首先先定义一下 Tensorflow 中的每个参数的变量。

x = tf.placeholder(tf.float32,[None,784]) # 占位符表示,第二个参数中第一个值为None代表不固定个数,维数为784
w = tf.Variable(tf.zeros([784,10])) # 定义初始化变量,从784层向量转化为10层的向量的过程,神经网络一层的结构
b = tf.Variable(tf.zeros([10])) # 偏执向量
y_ = tf.placeholder(tf.float32,[None,10])# 原理 y = softmax(x*w+b)
y = tf.nn.softmax(tf.matmul(x, w) + h)

接下来构建损失函数,在这里使用交叉熵损失函数,这是 Tensorflow 非常经典的已经封装好的函数,相当于构建真实的Y和输出的Y值所对应的交叉熵。

# 在这里labels与logits绝对不能弄混
cross_entropy = tf.reduce_sum(tf.nn.softmax_cross_entropy_with_logits(labels=y_,logits=y))

梯度下降的迭代使得损失函数最小,在这里使用随机梯度下降,设置初始学习速率

train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)

Tensorflow 会话 Session

在之前的准备工作中,我们仅仅定义了一些 Tensorflow 所必需的一些数据变量,但是我们如果希望 Tensorflow 跑起来的话必须得使用 Tensorflow 的会话工作。在 Session 才是数据真正的开始流,创建之前并没有真正的数据在里面。初始化所有的变量。因为数据量比较小,我们迭代一千次梯度下降。读取batch批次,只有到 Session.run 的时候才是真正的数据跑起来。然后我们定义准确率去查看准确度大致多少。最终使用 test 测试数据集来验证准确率的大小。

with tf.Session() as sess:tf.global_variables_initializer().run()for _ in range(1000):batch_xs, batch_ys = mnist.train.next_batch(100)sess.run(train_step,feed_dict={x:batch_xs,y_:batch_ys})curr = tf.equal(tf.argmax(y, 1),tf.argmax(y_, 1))acc = tf.reduce_mean(tf.cast(curr,tf.float32))print(sess.run(acc,feed_dict={x:mnist.test.images,y_:mnist.test.labels}))
# -> 0.9144

总的来说,Tensorflow 入门级别也并不是很容易,但是每个人都得学的手写体识别,堪称神经网络的Hello World算法。希望每个大佬都能耐心的学下去,变得更强更秃。


全部代码

import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
from tensorflow.examples.tutorials.mnist import input_data
import numpy as np
import os
import scipy.misc
mnist = input_data.read_data_sets('mnist',one_hot=True)
dir_path = 'mnist/data/'
if not os.path.exists(dir_path):os.makedirs(dir_path)
x = tf.placeholder(tf.float32,[None,784])
w = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))
y_ = tf.placeholder(tf.float32,[None,10])
y = tf.nn.softmax(tf.matmul(x, w) + b)
cross_entropy = tf.reduce_sum(tf.nn.softmax_cross_entropy_with_logits(labels=y_,logits=y))
train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)with tf.Session() as sess:tf.global_variables_initializer().run()for _ in range(1000):batch_xs, batch_ys = mnist.train.next_batch(100)sess.run(train_step,feed_dict={x:batch_xs,y_:batch_ys})curr = tf.equal(tf.argmax(y, 1),tf.argmax(y_, 1))acc = tf.reduce_mean(tf.cast(curr,tf.float32))print(sess.run(acc,feed_dict={x:mnist.test.images,y_:mnist.test.labels}))

最后还是希望你们能给我点一波小小的关注。

奉上自己诚挚的爱心

深度学习Hello World --- 手写体识别 实战相关推荐

  1. 【实战】深度学习构建人脸面部表情识别系统

    实战:深度学习构建人脸面部表情识别系统 一.表情数据集 数据集采用了kaggle面部表情识竞赛的人脸表情识别数据集. https://www.kaggle.com/c/challenges-in-re ...

  2. 深度学习入门系列6项目实战:声纳回声识别

    大家好,我技术人Howzit,这是深度学习入门系列第六篇,欢迎大家一起交流! 深度学习入门系列1:多层感知器概述 深度学习入门系列2:用TensorFlow构建你的第一个神经网络 深度学习入门系列3: ...

  3. 深度学习二(Pytorch物体检测实战)

    深度学习二(Pytorch物体检测实战) 文章目录 深度学习二(Pytorch物体检测实战) 1.PyTorch基础 1.1.基本数据结构:Tensor 1.1.1.Tensor数据类型 1.1.2. ...

  4. 深度学习之智能问答机器人实战

    深度学习之智能问答机器人实战 class1 对话类型 基于知识库问答 录入问题和答案 设计标准问题的相似问题 使用搜索和排序,根据相似度返回结果 基于规则脚本 以一定的语法定义规则 常用正则表达式等约 ...

  5. Kaggle深度学习与卷积神经网络项目实战-猫狗分类检测数据集

    Kaggle深度学习与卷积神经网络项目实战-猫狗分类检测数据集 一.相关介绍 二.下载数据集 三.代码示例 1.导入keras库,并显示版本号 2.构建网络 3.数据预处理 4.使用数据增强 四.使用 ...

  6. 深度学习Anchor Boxes原理与实战技术

    深度学习Anchor Boxes原理与实战技术 目标检测算法通常对输入图像中的大量区域进行采样,判断这些区域是否包含感兴趣的目标,并调整这些区域的边缘,以便更准确地预测目标的地面真实边界框.不同的模型 ...

  7. 中科院DeepMind联手,用深度学习揭示大脑如何识别人脸|Nature子刊

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 梦晨 发自 凹非寺 量子位 报道 | 公众号 QbitAI Deep ...

  8. TensorFlow深度学习算法原理与编程实战 人工智能机器学习技术丛书

    作者:蒋子阳 著 出版社:中国水利水电出版社 品牌:智博尚书 出版时间:2019-01-01 TensorFlow深度学习算法原理与编程实战 人工智能机器学习技术丛书 ISBN:97875170682 ...

  9. 浙江大学《深度学习与行人重识别》课程课件

    点击上方,选择星标或置顶,不定期资源大放送! 阅读大概需要3分钟 Follow小博主,每天更新前沿干货 课程介绍 该课程为浙江大学罗浩博士于2018年10月录制的<基于深度学习和行人重识别> ...

  10. 【深度学习】DIY 人脸识别技术的探索(一)

    [深度学习]DIY 人脸识别技术的探索(一) 文章目录 摘要 问题重述 模型假设 定义与符号说明 问题分析 模型的建立与求解 参考 摘要 伴随着人工智能技术的发展,人们对信息安全有了更高的要求,传统的 ...

最新文章

  1. 研究生,导师不是你的保姆……
  2. 润乾集算报表多样性数据源之动态SQL传递
  3. VB API 之 第十一课 绘制矩形
  4. PHP解析URL并得到URL中的参数
  5. [转]数据库事务ACID特性
  6. vue1升级到vue2的问题
  7. 威海二职工业机器人专业_工业机器人专业主要学什么?
  8. Hibernate关系映射(三) 多对一和一对多
  9. .NET 2.0 的压缩功能
  10. ICMP增强型snort规则
  11. 联通路由器设置FTP服务器,做家庭储存云盘
  12. QQ连连看外挂--基于LAScript
  13. What is CRA
  14. vue2 vue3 js es6 html css 知识点
  15. ChemDraw怎么激活?ChemDraw激活教程
  16. (四)git储藏与清理
  17. 环境搭建以及一些命令的记录
  18. 如何测试一个一次性水杯
  19. c#操作word图表(二)
  20. 服务器开机显示0x000000ca,使用电脑出现蓝屏代码0x000000CA故障该如何解决?

热门文章

  1. 如何快速开通微信小程序的流量主功能
  2. Linux-四-常见符号
  3. mysql查询登录端口_mysql查看、修改端口、指定端口登录
  4. 【USB设备设计】--复合设备,双HID高速(64Byte 和 1024Byte)
  5. 想在原有的基础上,再次添加一些阿里图标的进坑
  6. android第三方库进程,Android 第三方库AgentWeb的使用
  7. 用java异或的方式去实现简单的视频加密
  8. word:清除格式(设置快捷键)
  9. ACC测试理论--google软件测试之道
  10. java wav 转 mp3_使用jave2将音频wav转换成mp3格式