1.1 CNN的核心 —— 卷积
我们以二维滑动卷积着重说明。与我们的滑动窗异常值检测类似,但滑动卷积涉及三个矩阵:第一个矩阵通常尺寸大且固定不动,在这称之为“输入矩阵”;第二个矩阵尺寸小,在输入矩阵上以从左到右,从上到下进行滑动,在这称之为“卷积核”;卷积核移动的过程中,计算的方式是 将两个小矩阵的相应元素相乘并求和,结果按照移动顺序作为第三个矩阵元素,在这称为“特征矩阵”。
卷积运算的过程中,每次都需要进行滑动,滑动的长度称为步长。我们可以发现,特征矩阵元素个数少于输入矩阵的元素个数。我们在输入矩阵的边缘添加0元素,也就是扩展一圈,就可以让得到的维度相同。卷积核的移动始终在输入矩阵内部。
卷积核与图像的相似程度越高,得到的响应值越大,因此可以通过滑动卷积运算来提取图像的特征。
1.2 卷积神经网络
卷积神经网络是包含卷积计算且具有深度结构的前馈神经网络,典型神经网络可以分为特征提取(卷积层、激活函数、池化层)和全连接层。 AlexNet包含5个卷积层和3个全连接层。
第一层是图像输入层,通过卷积以及其他特定形式的运算从图像中提取特征,接下来每一层都以前一层提取出的特征作为输入进行卷积,得到更高级的特征。经过多层的变换后,就可以把原始图像转换为高层次的抽象特征。
1.3 卷积层的原理
卷积层通过卷积核对输入信息进行卷积运算从而提取特征。
一个卷积神经网络通常包含多个卷积层,以AlexNet为例子,就有5个卷积层,在卷积神经网络的数字图像识别过程中,每层的特征将会更加抽象。同一个卷积层中可以有多个不同的卷积核,所得到的特征图的个数和卷积层的卷积个数有关(子卷积核是分别卷积后求和,当然也可以是别的计算方法)。卷积神经网络工作的过程中,无论是输入还是中间的特征图,通常不是一个简单的二维图,我们称每一个二维图为一个通道。比如彩色RGB图像,就i是三通道组成的.对于多通道输入,每个通道采用不同的卷积核卷积,然后将对于特征矩阵的元素进行累加即可。
卷积神经网络中的元素是通过训练确定的,称之为参数。在这里,参数的都是 参数共享的。对于同一幅输入图像或者特征图,在卷积的过程中,每个位置都是用同一个卷积核取进行运算的。卷积层使用参数共享,可以减少训练的参数,降低网络的复杂程度,提高训练效率,避免了过多连接导致的过拟合现象。
1.4 非线性激活函数
卷积运算是一种线性运算,若干个线性运算的叠加可以用一个线性运算表示,那这样的话,进行那么多卷积运算,不就等于只进行了一个大的?因此在每个卷积后面加一个非线性激活函数,那么每个卷积层的效果都可以得到保留。
非线性激活函数有很多种,ReLU就是其中之一,表达式位 f(x)=max(0,x),对于输入小于0的数,会让其为0,大于0的不变
1.5 池化层
Pooling池化操作,实质就是对统计信息提取的过程。在卷积神经网络中,池化就是对特征图上面的一个给定区域让他求出一个能代表这个区域的点,常见的就是最大池化和平均池化。
池化可以减少特征图的尺寸,也能保留这个区域种的一些特性。
1.6 全连接层
相当与一个分类器或预测器的作用
1.7 使用MATLAB构建一个卷积神经网路
我们的目标是构建一个卷积神经网络,实现对输入的0~9数字的二值图像进行分类
1.7.1 加载图像样本数据
加载MATLAB下载时自带的手写图片数据
digitDatasetPath = fullfile(matlabroot,'toolbox','nnet','nndemos', 'nndatasets','DigitDataset');
imds = imageDatastore(digitDatasetPath, 'IncludeSubfolders',true,'LabelSource','foldernames');
figure;
perm = randperm(10000,20);
for i = 1:20subplot(4,5,i);imshow(imds.Files{perm(i)});
end
得到结果如下
以上为从数据库中随机调出20张图片给你看,每次运行也会有不同的结果,imds就是我们存放的数据库。
1.7.2 将数据分为训练集(7500),剩下为测试集
%% 步骤2:将加载的图像样本分为训练集和测试集(在本例中,训练集的数量为750幅,剩余的为测试集)
numTrainFiles = 7500;
[imdsTrain,imdsValidation] = splitEachLabel(imds,numTrainFiles,'randomize');
1.7.3 利用工具箱构建神经网络
将其导入到工作区,我们就设计好了一个卷积神经网络,并在数据内把前面所导入好的数据集选上,然后配置训练选项并开始训练。
训练结果如下:
1.7.4 训练效果验证
我们可以随机取一张照片放到网络里面,查看其识别的效果。当然,训练完成后,需要把训练好的网络导出到工作区里
-----
以上内容为MATLAB工具箱的初次使用与卷积神经网络的概念说明