<cite id="fzn17"></cite>
<var id="fzn17"></var><cite id="fzn17"><video id="fzn17"></video></cite>
<cite id="fzn17"></cite>
<var id="fzn17"></var>
<menuitem id="fzn17"><span id="fzn17"><thead id="fzn17"></thead></span></menuitem>
<cite id="fzn17"><span id="fzn17"><var id="fzn17"></var></span></cite><var id="fzn17"><span id="fzn17"><var id="fzn17"></var></span></var>
<var id="fzn17"></var>
<menuitem id="fzn17"></menuitem>
<cite id="fzn17"><video id="fzn17"></video></cite>
|
|
51CTO旗下网站
|
|
移动端

3.4.2 手写数字识别

《深度学习基础教程》第3章神经网络入门,本章将重点介绍神经网络的基础知识,包括输入/ 输出层、隐藏层以及网络如何通过前向和反向传播学习。本节为大家介绍手写数字识别。

作者:杨伟 译来源:机械工业出版社|2018-12-12 11:02

3.4.2 手写数字识别

手写数字识别的挑战在于识别手写数字图像中的数字。它在许多场景中都很有用,比如识别信封上的?#25910;?#32534;码。本例将使用MNIST 数据集来开发和评估用于手写数字识别的神经网络模型。

MNIST 是一个托管在http://yann.lecun.com/exdb/mnist/ 上的计算机视觉数据集。它包括手写数字的灰度图像和正确的数字标签。每幅图像的大小为28 像素×28 像素。样本图像如图3-11 所示。

MNIST 数据分为三部分:55000 幅图像的训练数据,10000 幅图像的测试数据,以及5000 幅图像的验证数据。每幅图像都有自己的标签,代表一个数字。目标是将图像分类为数字,换句话说,将每个图像与10 个类中的1 个相关联。

可以使用0~1 之间的浮点数组成的1×784 向量表示图像。数字784 是大小为28×28图像中的像素数。通过将二维图像转换为一维向量来获得1×784 向量。可以将标签表示为一个1×10 的二值向量,其中只有一个元素为1,其余元素都为0。将使用TensorFlow 构建一个深度学习模型,以便基于给定的1×784 数据向量预测1×10 标签向量。

首先导入数据集:

  1. from tensorflow.examples.tutorials.mnist importinput_data  
  2. mnist = input_data.read_data_sets('MNIST_data’, one_hot=True

然后定义CNN 的一些基本构建块:

权值:

  1. def weight_variable(shape):  
  2. # 用对称破坏的小噪声初始化权重  
  3. initial = tf.truncated_normal(shape, stddev=0.1)  
  4. return tf.Variable(initial) 

偏置参数:

  1. def bias_variable(shape):  
  2. # 将偏置参数初始化为小的正数,以避免死神经元  
  3. # neurons  
  4. initial = tf.constant(0.1, shapeshape=shape)  
  5. return tf.Variable(initial) 

卷积:

  1. def conv2d(x, W):  
  2. # x 的***维是批处理大小  
  3. return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1],  
  4. padding=’SAME’) 

***池化:

  1. def max_pool_2x2(x):  
  2. return tf.nn.max_pool(x, ksize=[1, 2, 2, 1],  
  3. strides=[1, 2, 2, 1], padding=’SAME’) 

现在通过使用基本构建块的计算图来构建神经网络模型。我们的模型由两个卷积层组成,每个卷积层后面有一个池化层,***一层是全连接层。图3-12 给出了网络架构。

以下代码实现了这个CNN 架构:

  1. x = tf.placeholder(tf.float32, shape=[None, 784])  
  2. y_ = tf.placeholder(tf.float32, shape=[None, 10]) # 真实标签  
  3. # ***个卷积层  
  4. W_conv1 = weight_variable([5, 5, 1, 32])  
  5. b_conv1 = bias_variable([32])  
  6. #x_image 的***维是批处理大小  
  7. x_image = tf.reshape(x, [-1, 28, 28, 1])  
  8. h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1)  
  9. h_pool1 = max_pool_2x2(h_conv1)  
  10. # 第二个卷积层  
  11. W_conv2 = weight_variable([5, 5, 32, 64])  
  12. b_conv2 = bias_variable([64])  
  13. h_conv2 = tf.nn.relu(conv2d(h_pool1, W_conv2) + b_conv2)  
  14. h_pool2 = max_pool_2x2(h_conv2)  
  15. # 全连接层  
  16. W_fc1 = weight_variable([7 * 7 * 64, 1024])  
  17. b_fc1 = bias_variable([1024])  
  18. h_pool2_flat = tf.reshape(h_pool2, [-1, 7*7*64])  
  19. h_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat, W_fc1) +b_fc1) 

也使用Dropout 减小过拟合:

  1. keep_prob = tf.placeholder(tf.float32)  
  2. h_fc1_drop = tf.nn.dropout(h_fc1, keep_prob) 

现在构建***一层,读出层:

  1. W_fc2 = weight_variable([1024, 10])  
  2. b_fc2 = bias_variable([10])  
  3. # 读出层  
  4. y_conv = tf.matmul(h_fc1_drop,W_fc2) + b_fc2  
  5. h_fc1_drop = tf.nn.dropout(h_fc1, keep_prob) 

现在定义代价函数并训练参数:

  1. cross_entropy = tf.reduce_mean(  
  2. tf.nn.softmax_cross_entropy_with_logits(labels=y_logits=y_conv))  
  3. train_step = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy) 

下面定义评估:

  1. correct_prediction = tf.equal(tf.argmax(y_conv, 1), tf.argmax(y_, 1))  
  2. accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32)) 

***,可以在一个会话中运行图:

  1. with tf.Session() as sess:  
  2. sess.run(tf.global_variables_initializer())  
  3. for i in range(2000):  
  4. batch = mnist.train.next_batch(50)  
  5. if i % 20 == 0:  
  6. train_accuracy = accuracy.eval(feed_dict={  
  7. x: batch[0], y_: batch[1], keep_prob: 1.0})  
  8. print('step %d, training accuracy %g' % (i, train_accuracy))  
  9. train_step.run(feed_dict={x: batch[0], y_: batch[1],  
  10. keep_prob: 0.5})  
  11. print('test accuracy %g' % accuracy.eval(  
  12. feed_dict={  
  13. x: mnist.test.images,  
  14. y_: mnist.test.labels,  
  15. keep_prob: 1.0})) 

***,使用简单的CNN 在该MNIST 数据集的测试数据上达到了99.2%的精度。


喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书会第9群:808517103

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

订阅专栏+更多

16招轻松掌握PPT技巧

16招轻松掌握PPT技巧

GET职场?#26377;?#25216;能
共16章 | 晒书包

289人订阅学习

20个局域网建设改造案例

20个局域网建设改造案例

网络搭建技巧
共20章 | 捷哥CCIE

645人订阅学习

WOT2019全球人工智能技术峰会

WOT2019全球人工智能技术峰会

通用技术、应用领域、企业赋能三大章节,13大技术专场,60+国内外一线人工智能精英大咖站台,分享人工智能的?#25945;?#24037;具、算法模型、语音视觉等技术主题,助力人工智能落地。
共50章 | WOT峰会

0人订阅学习

读 书 +更多

ASP网络编程从入门到精通

本书是为那些对Web开发?#34892;?#36259;的读者而编写的。ASP(Active Server Pages)是微软公司在Web领域的又一次突破,它打破了以往只能由专业人员来...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊

51CTO服务号

51CTO播客

澳洲幸运5官方
<cite id="fzn17"></cite>
<var id="fzn17"></var><cite id="fzn17"><video id="fzn17"></video></cite>
<cite id="fzn17"></cite>
<var id="fzn17"></var>
<menuitem id="fzn17"><span id="fzn17"><thead id="fzn17"></thead></span></menuitem>
<cite id="fzn17"><span id="fzn17"><var id="fzn17"></var></span></cite><var id="fzn17"><span id="fzn17"><var id="fzn17"></var></span></var>
<var id="fzn17"></var>
<menuitem id="fzn17"></menuitem>
<cite id="fzn17"><video id="fzn17"></video></cite>
<cite id="fzn17"></cite>
<var id="fzn17"></var><cite id="fzn17"><video id="fzn17"></video></cite>
<cite id="fzn17"></cite>
<var id="fzn17"></var>
<menuitem id="fzn17"><span id="fzn17"><thead id="fzn17"></thead></span></menuitem>
<cite id="fzn17"><span id="fzn17"><var id="fzn17"></var></span></cite><var id="fzn17"><span id="fzn17"><var id="fzn17"></var></span></var>
<var id="fzn17"></var>
<menuitem id="fzn17"></menuitem>
<cite id="fzn17"><video id="fzn17"></video></cite>
福彩3d唐龙说彩 时时彩送彩金的平台 平特一尾买10元陪多少 重庆彩后一四码两期计划 时时开奖结果 永利线上娱乐 提现捕鱼游戏平台 天津时时结果记录 四川金7乐奖金 手机游戏漏洞扫描器