基于MATLAB的CNN卷积神经网络的训练和测试
Posted fpga和matlab
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于MATLAB的CNN卷积神经网络的训练和测试相关的知识,希望对你有一定的参考价值。
目录
一、理论基础
卷积神经网络(Convolutional Neural Networks, CNN)是一类包含卷积计算且具有深度结构的前馈神经网络(Feedforward Neural Networks),是深度学习(deep learning)的代表算法之一。卷积神经网络具有表征学习(representation learning)能力,能够按其阶层结构对输入信息进行平移不变分类(shift-invariant classification),因此也被称为“平移不变人工神经网络(Shift-Invariant Artificial Neural Networks, SIANN)” 。
对卷积神经网络的研究始于二十世纪80至90年代,时间延迟网络和LeNet-5是最早出现的卷积神经网络;在二十一世纪后,随着深度学习理论的提出和数值计算设备的改进,卷积神经网络得到了快速发展,并被应用于计算机视觉、自然语言处理等领域 。
卷积神经网络仿造生物的视知觉(visual perception)机制构建,可以进行监督学习和非监督学习,其隐含层内的卷积核参数共享和层间连接的稀疏性使得卷积神经网络能够以较小的计算量对格点化(grid-like topology)特征,例如像素和音频进行学习、有稳定的效果且对数据没有额外的特征工程(feature engineering)要求 。
定义:采用监督方式训练的一种面向两维形状不变性识别的特定多层感知机 。
CNN是在目标识别领域应用及其广泛的一种网络模型,其通过卷积运算来实现对图像特征的提取,避免了传统人工神经网络需要单独设计特征提取的环节。CNN的结构主要包括conv卷积层、pool池化层,Activation激活层以及FC全连接层,其具体如下图所示:
如图1所示的,当图像输入到CNN中时,首先进入卷积层,卷积层是CNN中最
重要的一个网络层。在卷积计算过程中,将输入的图像和一系列大小不一的卷积核函数进行卷积运算得到特征图。卷积层越多,那么通过卷积可以提取到的图像特征图谱的特征则更深入。卷积层的计算结果和卷积核大小、数量以及补零数量等参数相关。假设输入图像的维度为120*120,卷积核大小为7*7,卷积步进为1,那么通过卷积层只有,图像维度将变为114*114。
完成卷积运算之后,数据将进入池化层,池化层的功能等同于采样过程,其基本操作流程如图2.2所示。
从图2可知,池化层可以分为两种类型,均值池化的过程是使用一个2×2大小的滑动窗口,计算四个像素的平均值,得到一个原始图像维度一半的图像输出。最大值池化的过程是使用一个2×2大小的滑动窗口,计算四个像素的最大值,得到一个原始图像维度一半的图像输出。通过池化层之后,图像的维度将变为57*57。
完成池化层之后,数据将进入激活层,激活层的功能主要是解决单感知机对于非线性数据的分类效果较差的问题。比较常用的激活层函数为ReLU。
经过多个卷积层运算之后,数据将进入全连接层,其主要功能是将卷积后的图像数据映射到特征空间得到特征图谱,并将特征图谱和样本的分类标记进行关联。通过全连接层之后得到全连接层的标志输出。最后根据这些标记向量,转换为分类输出。
二、核心程序
...........................................................
layers = [ ...
imageInputLayer([1 2048 1])%%2D-CNN
convolution2dLayer([1,2],4)
reluLayer
maxPooling2dLayer([1 2],'Stride',2)
convolution2dLayer([1,2],4)
reluLayer
maxPooling2dLayer([1 2],'Stride',2)
fullyConnectedLayer(2)
softmaxLayer
classificationLayer];
.....................................................................
net = trainNetwork(Xtrain,ytrain,layers,options);%网络训练
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
X10=rand(100,2048);
X20=20*rand(100,2048);
Xtest1=[X10;X20];
for ii=1:1:200
for jj=1:1:2048
Xtest(1,jj,1,ii)=Xtest1(ii,jj);%%输入数据维度转化
end
end
y10=zeros(100,1);
y20=ones(100,1);
ytest1=[y10;y20];
ytest=categorical(ytest1);%%函数包要求标签类型是categorical
YPred = classify(net,Xtest);%%网络测试
YPred1 =double(YPred);%%转化为可显示的标签
accuracy = sum(YPred == ytest)/numel(ytest)
up108
三、测试结果
以上是关于基于MATLAB的CNN卷积神经网络的训练和测试的主要内容,如果未能解决你的问题,请参考以下文章
Matlab基于卷积神经网络CNN实现多分类预测(Excel可直接替换数据)
MATLAB教程案例97基于GA遗传优化的CNN卷积神经网络最优训练参数搜索matlab仿真
注意力机制 | CNN-BiLSTM-Attention基于卷积-双向长短期记忆网络结合注意力机制多输入单输出回归预测(Matlab程序)