卷积神经网络概述及Python实现

2018 年 9 月 1 日 云栖社区

摘要: 本文概括地介绍CNN的基本原理 ,并通过阿拉伯字母分类例子具体介绍其实现过程,理论与实践的结合体。


对于卷积神经网络(CNN)而言,相信很多读者并不陌生,该网络近年来在大多数领域都表现优异,尤其是在计算机视觉领域中。但是很多工作人员可能直接调用相关的深度学习工具箱搭建卷积神经网络模型,并不清楚其中具体的原理。本文将简单介绍卷积神经网络(CNN),方便读者大体上了解其基本原理及实现过程,便于后续工作中的实际应用。本文将按以下顺序展开:


  • 了解卷积操作

  • 了解神经网络

  • 数据预处理

  • 了解CNN

  • 了解优化器

  • 理解 ImageDataGenerator

  • 进行预测并计算准确性

  • demo


什么是卷积?


在数学(尤其是函数分析)中,卷积是对两个函数(f和g)的数学运算,以产生第三个函数,该函数表示一个函数的形状如何被另一个修改。(来源:维基百科)


此操作在多个领域都有应用,如概率、统计、计算机视觉、自然语言处理、图像和信号处理、工程和微分方程。


该操作在数学上表示为:


卷积操作


查看此链接以更加直观地了解卷积操作。

资源链接:

https://github.com/vdumoulin/conv_arithmetic


什么是人工神经网络?


人工神经网络(ANN)或连接系统是由构成动物大脑的生物神经网络模糊地启发的计算系统。这些系统通过从示例中“学习”以执行任务,通常不需要使用用任何特定规则来编程。(来源:维基百科)


人工神经网络是一个较小的处理单元集合,称为人工神经元,它们与生物神经元相似。


生物神经回路


生物神经回路



神经元之间的互联构成了一个网络模型


人工神经网络


人工神经网络


现在,我们开始具体实现。


导入必要的数据包



加载数据集



数据集


此处使用的数据集是手写数据集。


trainIamges.csv有1024列和13440行。每列表示图像中的像素,每行表示一张单独的灰度图像。每个像素的取值范围是0到255之间的值。



可视化数据集



训练数据集



训练数据集


测试数据集



测试数据集


数据预处理


编码分类变量


什么是分类变量?


在统计学中,分类变量是一个可以承担限制变量之一的变量,基于某些定性属性将每个个体或其他观察单元分配给特定组或名义类别。(来源:维基百科)


简单来说,分类变量的值表示类别或类。


为什么需要编码分类变量?


直接对表示类别的数字执行操作没有意义。因此,需要对其进行分类编码。
请查看此链接以了解分类变量示例。
阿拉伯字母表中有28个字母。因此,数据集有28个类别。



标准化


什么是标准化?


进行归一化以使整个数据进入明确定义的范围,一般选择归一化到0到1之间


在神经网络中,不仅要对数据进行标准化,还要对其进行标量化,这样处理的目的是能够更快地接近错误表面的全局最小值。(来源:Stack Overflow)



对其进行变形操作使得每条数据表示一个平面图像



按功能划分的零中心将每个样本的中心置零,并指定平均值。如果未指定,则对所有样品评估平均值。


建立CNN



最大池化(Max Pooling)是什么?


池化意味着组合一组数据,组合数据的过程中应该遵循一些规则。


根据定义,最大池化选取一组数据中的最大值作为其输出值。(来源:machinelearningonline.blog)


最大池还可以用于减小特征维度,它还可以避免过拟合的发生。查看此博客,以便更好地了解Max Pooling。


什么是Dropout?


Dropout是一种正则化技术,通过防止对训练数据进行复杂的协同适应来减少神经网络中的过拟合,这是神经网络模型中十分有效的方法之一。“ 丢失”指的是在神经网络中以某一个概率随机地丢弃部分神经单元。(来源:维基百科)


什么是Flatten?


对特征图进行展平,以将多维数据转换为一维特征向量,以供下一层(密集层)使用


什么是密集层?


密集层只是一层人工神经网络,也被称作全连接层。


CNN的优化方法


什么是优化?


优化算法帮助我们最小化(或最大化)目标函数,目标函数只是一个数学函数,取决于模型内部可学习的参数。模型中使用预测变量集(X)计算目标值(Y)。例如,我们将神经网络的权重(W)和偏差(b)值称为其内部可学习参数,用于计算输出值,并在最优解的方向上学习和更新这些参数,即最小化损失网络。这就是神经网络的训练过程。(来源:数据科学)



本文在这里使用的优化器是RMSprop,点击此处以了解有关RMSprop的更多信息。



什么是ImageDataGenerator?


当你的数据集规模比较小时,你可能会应用到图像数据生成器,它用于生成具有实时增强的批量张量图像数据,扩大数据集规模。一般而言,当数据量增多时,模型性能会得更好。
以下代码用于批量加载图像:



CNN拟合训练数据



做出预测


生成混淆矩阵


什么是混淆矩阵?


混淆矩阵是用于总结分类算法性能的一种技术。如果每个类别中的观察数量不等,或者数据集中有两个以上的类,单独的分类准确性可能会产生误导。计算混淆矩阵可以让我们更好地了解分类模型的正确性以及它所犯的错误类型。来源:machinelearningonline.blog



计算准确性



本文获得了97%的准确度,感兴趣的读者可以自己尝试下。


CNN手写数字识别demo


点击此链接可以实时查看CNN的工作情况,该demo显示了CNN的工作过程,以及每层输出的特征图。最后该CNN网络经过训练后能够识别手写数字。



作者信息


Vishal R,机器学习爱好者
本文由阿里云云栖社区组织翻译。
文章原标题《Convolutional Neural Network — A Bird’s eye view with an implementation》,译者:海棠,审校:Uncle_LLD。



end

关于TensorFlow你需要了解的9件事

阿里云Redis多线程性能提升思路解析

程序员精选:TensorFlow和ML前5名的课程

阿里云总监课第二期:如何打造智能语音交互爆款产品?

更多精彩

登录查看更多
4

相关内容

在深度学习中,卷积神经网络(CNN或ConvNet)是一类深度神经网络,最常用于分析视觉图像。基于它们的共享权重架构和平移不变性特征,它们也被称为位移不变或空间不变的人工神经网络(SIANN)。它们在图像和视频识别,推荐系统,图像分类,医学图像分析,自然语言处理,和财务时间序列中都有应用。

知识荟萃

精品入门和进阶教程、论文和代码整理等

更多

查看相关VIP内容、论文、资讯等
【实用书】Python机器学习Scikit-Learn应用指南,247页pdf
专知会员服务
266+阅读 · 2020年6月10日
最新《自动微分手册》77页pdf
专知会员服务
100+阅读 · 2020年6月6日
【实用书】Python技术手册,第三版767页pdf
专知会员服务
234+阅读 · 2020年5月21日
最新《机器学习理论初探》概述
专知会员服务
46+阅读 · 2020年5月19日
Python导论,476页pdf,现代Python计算
专知会员服务
260+阅读 · 2020年5月17日
《深度学习》圣经花书的数学推导、原理与Python代码实现
【新书】Pro 机器学习算法Python实现,379页pdf
专知会员服务
199+阅读 · 2020年2月11日
初学者的 Keras:实现卷积神经网络
Python程序员
24+阅读 · 2019年9月8日
基于TensorFlow和Keras的图像识别
Python程序员
16+阅读 · 2019年6月24日
只需10行Python代码,就能实现计算机视觉中目标检测
用Python实现流行机器学习算法
Python程序员
21+阅读 · 2018年12月31日
【干货】使用Pytorch实现卷积神经网络
专知
13+阅读 · 2018年5月12日
Tensorflow 文本分类-Python深度学习
Python程序员
12+阅读 · 2017年11月22日
TensorFlow实现神经网络入门篇
机器学习研究会
10+阅读 · 2017年11月19日
徒手实现CNN:综述论文详解卷积网络的数学本质
机器之心
25+阅读 · 2017年11月19日
Tensorflow卷积神经网络
全球人工智能
13+阅读 · 2017年10月14日
Meta-Learning with Implicit Gradients
Arxiv
13+阅读 · 2019年9月10日
Image Captioning based on Deep Reinforcement Learning
Relational recurrent neural networks
Arxiv
8+阅读 · 2018年6月28日
Arxiv
5+阅读 · 2018年1月30日
Arxiv
7+阅读 · 2018年1月10日
VIP会员
相关VIP内容
【实用书】Python机器学习Scikit-Learn应用指南,247页pdf
专知会员服务
266+阅读 · 2020年6月10日
最新《自动微分手册》77页pdf
专知会员服务
100+阅读 · 2020年6月6日
【实用书】Python技术手册,第三版767页pdf
专知会员服务
234+阅读 · 2020年5月21日
最新《机器学习理论初探》概述
专知会员服务
46+阅读 · 2020年5月19日
Python导论,476页pdf,现代Python计算
专知会员服务
260+阅读 · 2020年5月17日
《深度学习》圣经花书的数学推导、原理与Python代码实现
【新书】Pro 机器学习算法Python实现,379页pdf
专知会员服务
199+阅读 · 2020年2月11日
相关资讯
初学者的 Keras:实现卷积神经网络
Python程序员
24+阅读 · 2019年9月8日
基于TensorFlow和Keras的图像识别
Python程序员
16+阅读 · 2019年6月24日
只需10行Python代码,就能实现计算机视觉中目标检测
用Python实现流行机器学习算法
Python程序员
21+阅读 · 2018年12月31日
【干货】使用Pytorch实现卷积神经网络
专知
13+阅读 · 2018年5月12日
Tensorflow 文本分类-Python深度学习
Python程序员
12+阅读 · 2017年11月22日
TensorFlow实现神经网络入门篇
机器学习研究会
10+阅读 · 2017年11月19日
徒手实现CNN:综述论文详解卷积网络的数学本质
机器之心
25+阅读 · 2017年11月19日
Tensorflow卷积神经网络
全球人工智能
13+阅读 · 2017年10月14日
Top
微信扫码咨询专知VIP会员