(Tensorflow)手把手CNN入门:手写数字识别

简介: 手把手带你实战——《CNN入门:手写数字识别》!

深度学最令人兴奋域之一就是算机视觉。通,我够创建自动驾驶车系统、面部检测和自医学像分析等等。在本文中,我将向你展示卷的基本原理以及如何自己建一个手写数字行分类的系统

f6b247650f1d689504cfca4e25034dcb51025592

卷积神经网络的功能似乎是人类大脑中生物功能的复制,早在1959年,David Hubel和Torsten Wiesel对猫和猴进行了研究,这些研究揭示了动物视觉皮层的功能。他们发现的是,许多神经元具有小的局部接受性,即仅对整个视野的一小块有限区域起反应。他们发现某些神经元会对某些特定模式做出反应,例如水平线、垂直线和其他圆形。他们还发现其他神经元具有更大的感受野并且被更复杂的模式刺激,这些模式是由较低水平神经元收集的信息组合。这些发现奠定了我们现在称之为卷积神经网络的基础。接下来,我们逐一介绍卷积神经网络的组成。

1、卷积层

2d70cefa740f2cc038d80e75e40638048c38faa1

卷积神经网络中每层卷积层由若干卷积单元组成,每个卷积单元的参数都是通过反向传播算法最佳化得到的。卷积运算的目的是提取输入的不同特征,第一层卷积层可能只能提取一些低级的特征如边缘、线条和角等层级,更多层的网路能从低级特征中迭代提取更复杂的特征。你可以将每个过滤器描成一个窗口,窗口在像的尺寸上滑检测属性。滤镜在图像上滑动的像素数量称为步幅。步幅1意味着波器一次移一个像素,其中2的步幅将向前跳2个像素。

73ecc6045e01bf1bde3b89fcb406fa0c7eddbf9b

在上面的例子中,我可以看到一个垂直线检测器。原始6x6,它使用3x3滤镜进行扫描,步长为1,从而4x4尺寸出。而过滤器仅对其视野左右列中的部分感兴趣。通过对图像的入求和并乘以3×3滤波器的配置,我们得到3+1+2-1-7-5=-7。然后波器向右移一步,然后1+0+3-2-3-1=-2-2然后-7的位置。此程将持4x4网格完成止。之后,下一个特征图将使用它自己的唯一过滤/内核矩阵计算自己的

15a86d263f6985ecdf967711136fb29f69acdad6

2.池化层

池化层的目标是通过聚合卷积层收集的值或所谓的子采样来进一步降低维度。除了为模型提供一些正则化的方案以避免过度拟合之外,这还将减少计算量。它们遵循与卷积层相同的滑动窗口思想,但不是计算所有值,而是选择其输入的最大值或平均值。这分别称为最大池化和平均池化。

82e0724bc954f5a7cee1d109e2be159046af863b

这两个组件是卷积层的关键构建块。然后,你通常会重复此方法,进一步减少特征图的尺寸,但会增加其深度。每个特征图将专门识别它自己独特的形状。在卷积结束时,会放置一个完全连接的图层,其具有激活功能,例如Relu或Selu,用于将尺寸重新整形为适合的尺寸送入分类器。例如,如果你的最终转换层为3x3x128矩阵,但你只预测10个不同的类,则需要将其重新整形为1x1152向量,并在输入分类器之前逐渐减小其大小。完全连接的层也将学习它们自己的特征,如在典型的深度神经网络中。

 

254b10c36cc57ad5b4c29050ee3cdf3b2e416b2d

现在让我们看看在MNIST手写数字数据集上的Tensorflow中的实现。首先,我将加。使用sklearn中的fetch_mldata,我mnist数据集并将像和标签分配xy变量。然后我建我的训练/测试装置。最后,我几个例子来了解任

ef619adc341c0add6a08c3c701f1294bc66749c4

9654fc0957ef7fe02fe508c7aea5b49c1bd8c425

接下来,我行一些数据增强是提高模型性能的可靠方法。通过创训练图像的化,可以模型建正化。我将使用Scipyndimage像向右、向左、向上和向下移1个像素。这不仅提供了更多种类的例子,而且还会大大增加我们训练集的大小

031ae02232bfb7477e5e8c708cd41e916d19d00d

163b69e9b3264e01d03a3529d9c8c6a6ec52773d

7e53e942d10112cb4fb5bc9108dca54c13b35095

我将向你展示的最后一种数据增强的方式:使用cv2库创建图像的水平翻转。我们还需要为这些翻转图像创建新标签,这与复制原始标签一样简单。

 

5ac5604e161e92264ff87e51bad974dc02a6156f

设置“flipCode = 0”生垂直翻

62aaa93a76ee617f39b9822988fcc243f409db2d

接下来,我建一个助函数,用于将随机微型批次提供的神络输入。由于卷积层的性,它在前向和后向播步需要大量的存器。考具有4x4滤镜的图层,输出128步幅1的特征和具有尺寸299x299RGB图像输入的SAME填充。参数的数量将相等(4x4x3+1x128 = 6272.现在考虑这128个特征中的每一个都299x299个神元,并且些神元中的每一个都4x4x3输入的加权和这意味着我们需要4x4x3x299x299x150=643,687,200算,这只是一个训练的例子。

a44ad825c35415a44f6d498cc47491c7813f1057

现在我开始建我的网架构。首先,我们为的培数据/特征创建占位符。我需要将它重新整形-1,28,28,1)矩,因tensorflow conv2d层需要4维输入。我将第一个null,以允将任意批量大小提供占位符。

ed63c7a5c193e9b2be7eab64d4fddeb23a84640a

接着我们设计我们的卷积层,我是从Le-NET5(由Yann LeCun)网架构中取灵感,架构因其在手写数字分方面成功而名。我建你研究Le-NET5以及其他经过验证的模型,这样就可以了解哪种卷积网络适用于不同的任务链接:http://yann.lecun.com/exdb/publis/pdf/lecun-01a.pdf

bbda097cda7321d8522a178d1f7a8ac9b2939c15

我们模型卷积层的第一12个特征图组成,使用3x3过滤器,步幅为1们选择SAME填充,通入周添加一个零填充来保持像的尺寸。然后,我们设置最大池化使用3x3过滤器,步幅为1,这将13x13x12。所以我从一个28x28x1像开始,然后我个矩阵传递给第二个转换层,第二个转换层具有3x3过滤器的深度,stride=1SAME填充这将输出一个6*6*16维矩阵。你可以看到我正在小特征图的度空,但要更深入。接下来,我使用Selu函数激活两个密集来减少每层输入的数量大一半,直到最将它们输入我logits

f7378d0f42e181f43249631f113b82a21c9937f5

接着我们创建我们的损失函数,在这种情况下,它将是softmax交叉熵,它将输出多类概率。你可以将交叉熵视为各种数据点之间距离的度量。我们选择AdamOptimizer(自适应矩估计),当梯度下降时自动调整它的学习率。最后,我们创建了一种评估结果的方法。Tensorflow的in_top_k函数将计算我们的logits并选择最高分。然后我们使用我们的准确度变量输出0-1%之间的百分比。

现在我们已经为训练阶段做好了准备,让我们看看我们的模型表现得如何。

1114c4a7ac5bcd0f6fb14d8a78b0157c6a814f92

在第19epoch,我们的正确率在0.9907这已经比任何机器学习算法的结果更好,因此卷积已经取得了领先现在让我们尝试使用我们的移位功能/功能,并的网添加两个新元素:dropout和批量标准化

00f5bdadd438496d3bb04507b1dcbdee2f9fe739

使用placeholder_with_default节点修改现有占位符,这些节点将保存批量标准化和dropout层生成的。在训练,我值设True,在测试,我将通过设False将其关

c54ff134067c4dbdbdaf05f432fbc886a337d991

批量准化只是简单每批次的数据准化。我指定了0.9量。而dropout和正化指定动量为1才能在训练完全随机地关闭节点。这导致其余节点必须松弛,从而提高其有效性。想象一下,一家公司决定每周随机选择50工留在家里。其余的工作人将不得不有效地外的工作,提高他在其他域的技能。

0bdf49e11aa18b985de540c3497e897545f9140b

接着我们创建我失函数,训练步骤估步,然后行一些修改。通批量准化行的算在每次迭代期保存更新操作。为了访问这些,我们分配一个变量extra_update_ops = tf.get_collectiontf.GraphKeys.UPDATE_OPS)。在我训练操作期,我将其作列表training_op一起提供sess.run。最后,在验证/测试预测时,我们通过feed_dict为占位符分配False。我不希望在预测阶段有任何随机化。为了获得输出,我们使用我们的测试集运行logits操作。让我们看看这个模型添加正则化/标准化并且正在使用增强数据的方法表现得如何。

94e4eca0101d07bec398bbc155490106529e39a9

29epoch,我们在10,000个数字的测试集上达到了99.5%的准确率。正如你所看到的那,第二个epoch时模型精确度达到了99%,而之前的模型只有16%虽然0.05%可能不是很多,但在理大量数据时这是一个重大改。最后,我将向你展示如何在logits输出上使用np.argmax产生的预测

8f1bb22294bcb2069765c98ebb526870047501f4

本文由阿里云云栖社区组织翻译。

文章原标题《convolutional-neural-net-in-tensorflow》

作者:Stephen Barter 译者:虎说八道,审校:。

文章为简译,更为详细的内容,请查看原文

相关文章
|
3月前
|
机器学习/深度学习 人工智能 算法框架/工具
深度学习中的卷积神经网络(CNN)入门
【10月更文挑战第41天】在人工智能的璀璨星空下,卷积神经网络(CNN)如一颗耀眼的新星,照亮了图像处理和视觉识别的路径。本文将深入浅出地介绍CNN的基本概念、核心结构和工作原理,同时提供代码示例,带领初学者轻松步入这一神秘而又充满无限可能的领域。
|
3月前
|
机器学习/深度学习 自然语言处理 前端开发
前端神经网络入门:Brain.js - 详细介绍和对比不同的实现 - CNN、RNN、DNN、FFNN -无需准备环境打开浏览器即可测试运行-支持WebGPU加速
本文介绍了如何使用 JavaScript 神经网络库 **Brain.js** 实现不同类型的神经网络,包括前馈神经网络(FFNN)、深度神经网络(DNN)和循环神经网络(RNN)。通过简单的示例和代码,帮助前端开发者快速入门并理解神经网络的基本概念。文章还对比了各类神经网络的特点和适用场景,并简要介绍了卷积神经网络(CNN)的替代方案。
666 1
|
4月前
|
机器学习/深度学习 SQL 数据采集
基于tensorflow、CNN网络识别花卉的种类(图像识别)
基于tensorflow、CNN网络识别花卉的种类(图像识别)
114 1
|
4月前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的卷积神经网络(CNN)入门与实践
【8月更文挑战第62天】本文以浅显易懂的方式介绍了深度学习领域中的核心技术之一——卷积神经网络(CNN)。文章通过生动的比喻和直观的图示,逐步揭示了CNN的工作原理和应用场景。同时,结合具体的代码示例,引导读者从零开始构建一个简单的CNN模型,实现对图像数据的分类任务。无论你是深度学习的初学者还是希望巩固理解的开发者,这篇文章都将为你打开一扇通往深度学习世界的大门。
|
5月前
|
机器学习/深度学习 人工智能 算法
深度学习中的卷积神经网络(CNN)入门与实践
【9月更文挑战第19天】在这篇文章中,我们将探索深度学习的一个重要分支——卷积神经网络(CNN)。从基础概念出发,逐步深入到CNN的工作原理和实际应用。文章旨在为初学者提供一个清晰的学习路径,并分享一些实用的编程技巧,帮助读者快速上手实践CNN项目。
|
5月前
|
机器学习/深度学习 人工智能 TensorFlow
深度学习入门:理解卷积神经网络(CNN)
【9月更文挑战第14天】本文旨在为初学者提供一个关于卷积神经网络(CNN)的直观理解,通过简单的语言和比喻来揭示这一深度学习模型如何识别图像。我们将一起探索CNN的基本组成,包括卷积层、激活函数、池化层和全连接层,并了解它们如何协同工作以实现图像分类任务。文章末尾将给出一个简单的代码示例,帮助读者更好地理解CNN的工作原理。
86 7
|
4月前
|
机器学习/深度学习 PyTorch API
深度学习入门:卷积神经网络 | CNN概述,图像基础知识,卷积层,池化层(超详解!!!)
深度学习入门:卷积神经网络 | CNN概述,图像基础知识,卷积层,池化层(超详解!!!)
|
6月前
|
机器学习/深度学习 人工智能 TensorFlow
深度学习入门:使用Python和TensorFlow构建你的第一个神经网络
【8月更文挑战第31天】 本文是一篇面向初学者的深度学习指南,旨在通过简洁明了的语言引导读者了解并实现他们的第一个神经网络。我们将一起探索深度学习的基本概念,并逐步构建一个能够识别手写数字的简单模型。文章将展示如何使用Python语言和TensorFlow框架来训练我们的网络,并通过直观的例子使抽象的概念具体化。无论你是编程新手还是深度学习领域的新兵,这篇文章都将成为你探索这个激动人心领域的垫脚石。
|
6月前
|
机器学习/深度学习 人工智能 自动驾驶
深度学习中的卷积神经网络(CNN)入门
【8月更文挑战第31天】在人工智能的璀璨星空中,卷积神经网络(CNN)如同一颗耀眼的星辰,以其卓越的图像处理能力在深度学习领域熠熠生辉。本文将带你领略CNN的魅力,从其结构原理到实战应用,深入浅出地探索这一技术的奥秘。我们将通过Python代码片段,一起实现一个简单的CNN模型,并讨论其在现实世界问题中的应用潜力。无论你是初学者还是有一定基础的开发者,这篇文章都将为你打开一扇通往深度学习世界的大门。
|
6月前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的卷积神经网络(CNN)入门
【8月更文挑战第31天】在人工智能的浪潮中,深度学习以其强大的数据处理能力成为时代的宠儿。本文将引导你走进深度学习的核心组件之一——卷积神经网络(CNN),并带你一探其背后的奥秘。通过简明的语言和直观的代码示例,我们将一起构建一个简易的CNN模型,理解它在图像处理领域的应用,并探索如何利用Python和TensorFlow实现它。无论你是初学者还是有一定基础的开发者,这篇文章都将为你打开一扇通往深度学习世界的大门。

热门文章

最新文章