本文准备以MNIST数据集为案例,使用Python语言和TensorFlow平台构建卷积神经网络模型。
一、准备工作
- 具备一定的Python语言基础知识,安装任何可用的Python开发工具,安装TensorFlow库,使用pip库安装
pip install tensorflow
然后在解释器中导入tensorflow库(import tensorflow),看是否有错,没有,则安装成功。
- 下载MNIST数据集,了解该数据集的内容。这块可用看看Tensorflow官方文档中文版,链接:http://www.tensorfly.cn/tfdoc/tutorials/mnist_beginners.html
二、卷积神经网络
深层的神经网络与最常见的单一隐藏层神经网络的区别在于深度。深度神经网络中,每一个节点层在前一层输出的基础上学习识别一组特定的特征,随着神经网络深度的增加,节点所能识别的特征也越来越复杂。
对于常见的全连接神经网络来说,存在以下几点不足:
- 参数太多,在MNIST数据集中,只有28*28*1,就会有这么多权重,如果说更大的图片,比如200*200*3,就需要120000多个,这完全是浪费;
- 没有利用像素之间位置信息,对于图像识别任务来说,每个像素与周围像素的联系都是比较紧密的;
- 层数限制,准确度不会因为层数的增加而无上限的提高。
而卷积神经网络拥有着卷积层和池化层组合在一起的特征提取器,它权重共享的机制解决了权重爆炸的问题,这种特定结构的神经网络模型受到了大家的青睐。
下图是卷积神经网络的错误率、发展历史和方向:
神经网络(Neural Network)的基本组成包括输入层、隐藏层和输出层。而卷积神经网络的特点在于隐藏层分为卷积层(convolution layer)和池化层(pooling layer,又叫下采样层)
网络中的数据变化如下所示,可以看出,卷积神经网络的数据的宽度和高度会不断减小,但深度会不断提高
卷积神经网络结构分析:
1.卷积层
- 卷积层过滤器(卷积核):
个数;大小(一般为1*1、3*3、5*5);步长(一般为1);零填充(‘SAME’或‘VALID’)
卷积层的输出深度由过滤器个数决定,输出宽度和高度用如下公式进行计算
卷积层计算过程示意图如下:
上图是不填充0的