CNN Matlab例子RGB_Matlab中的深度学习——CNN图像分类实例

发布时间:2024-07-20 18:01

\"CNN

做模式识别尤其是深度学习的小伙伴,十之八九都在使用Pytorch或Tensorflow完成着自己的idea。确实,如今的主流框架中,python凭借优秀的生态攻城略地,独领风骚。

但是对于很多刚刚入门深度学习的新手,尤其是用惯了Matlab又不熟悉python的小伙伴,并不要求有多么新颖且赶潮流的模型,那么这种情况下,Matlab提供的Deep Learning Toolbox可能就是你的第一选择。

今天咱么侧重实战,一起来学习一个Matlab环境下运用卷积神经神经网络(CNN)实现图像分类的小栗子,力争用最通俗的语言进行解释,闲话不多说,咱直接上干货。

\"e1d5c61520c927f6d4fe273e690ba4e7.png\"

环境要求:Matlab2018a及以上版本(18a版本开始提供Deep Learning Toolbox的工具箱,正式拉开了Matlab进军深度学习领域的序幕);

数据集:大多图像分类的Benchmark数据集都会使用到MNIST,但是由于使用的实在太多了,以及分类的难度确实不大,所以我们今天分享一个相似的但是难度稍大的数据集,名字叫notMNIST,附上数据集的链接:

http://yaroslavvb.blogspot.com/2011/09/notmnist-dataset.html

\"CNN
作者给出的数据集示例

\"CNN
自己选取部分数据显示的结果

代码部分:

为了尽可能的把demo写的浅显易懂,也为了其他小伙伴可以直接套用此模型来跑自己的数据,我们尽可能地不使用复杂晦涩的函数,努力做到步子小一点,注释多一点。

demo中使用的数据集(下载后和程序放在一个文件夹下,不用改路径,直接运行程序即可):

链接:https://pan.baidu.com/s/1JnS6yfnoxTNg1d0_atpGHg

提取码:hw89

% 数据集来源:

以上代码主要实现了数据的导入以及数据集的随机划分,未使用一步到位的函数,这样大家就可以在工作区清楚的看到每一步是怎样实现的。这里解释randperm( )函数,其可随机产生一个和样本个数相同数目的序列,例如共有10个样本,那么randperm(10)的结果可能为

8     3    10     5     2     4     1     7     9     6

因此我们使用这个随机序列就可以实现数据集的随机划分,本程序设置训练集数据占50%,验证集数据占30%,测试集数据就占剩余的20%。数据集准备完成后,我们就开始搭建CNN网络

%% 定义网络层

这里定义的CNN网络又1个卷积层、1个池化层和1个全连接层组成,其中还使用了批量归一化操作,当然也可以加入dropout来防止过拟合。至于网络结构的设计就属于“炼丹”的范畴了,没有一个统一的标准,因人而异,需要大家自己慢慢体会了。

下面我们简单介绍没有验证集和有验证集的区别:

没有验证集:

% 参数

\"CNN

大家注意红框的几点,没有验证集合训练过程会迭代到最大迭代步数,并且左侧图像中没有验证集的曲线。这里有一个问题,如果我们遇到复杂的问题,模型中又缺少防止过拟合的操作(批量归一化,dropout,正则化或大数据集都可以防止过拟合),那么最终结果极有可能会出现过拟合,这当然是我们不想出现的情况。因此,如何判断模型训练是否“恰到好处”,我们应该引入验证集帮助我们进行判断。

存在验证集:

% 参数

\"CNN

options 中我们加入了更多的人为设置的参数,这样稍微高级的定义会使得模型训练的更符合你的要求。加入验证集后,我们可以看到训练过程“早停”了,Epoch只迭代了8次模型就训练过程就结束了,原因如绿框内容所示,Patience为5表示:如果5步迭代中验证集的loss都没有减小的话,训练就终止了。在绝大数情况下,这种早停的机制会防止模型过度训练从而出现过拟合的现象。

最终我们使用测试集验证模型的泛化能力即可,相应代码与结果如下

% 测试

\"CNN

测试集分类准确为92.0961%,效果还可以接受。如果你有兴趣,更换模型拓扑结构、优化算法、激活函数等等,可能会得到更好的分类结果。

\"e1d5c61520c927f6d4fe273e690ba4e7.png\"

今天分享的例子大家按照流程一步一步操作,肯定都能跑通,使用Matlab做深度学习适应于于以下人群:

1.熟悉Matlab但不熟悉Python语言的小伙伴;

2.刚刚接触深度学习,想要将理论迅速实现的小伙伴;

3.不需要state-of-art模型的,只需要将经典深度学习模型应用到自己研究领域的小伙伴

其中以上分享的Matlab中深度学习的代码,与Keras很像,都是“搭积木”的形式将模型拼凑起来而已,但是如果真的想进一步深入研究深度学习,或者是对现有模型进行改进创新,那么Matlab中提供的工具包集成度就显得太高了,pytorch或tensorflow或许更合适。但是不过怎么说,Matlab至少在深度学习领域迈出了一大步,可喜可贺。

\"CNN

这个专栏毕竟主要讲时间序列的相关内容,如果大家喜欢,下一步我会继续发布在Matlab环境下使用CNN或LSTM进行时间序列预测的各种demo。

如有问题私聊留言都欢迎,水平有限,如有错误,也请路过的大佬批评指正~~

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号