matlab在图像识别(深度学习神经网络)中的使用(转)

前言:
1)图像识别用途甚广,解决的算法之一,是深度学习神经网络。matlab近几个版本,对这块的语法修改较多,总体而言,用户用起来更方便了;
2)这里以2018a版本为例,做一些粗略的说明。

1.概念说明

1)图像识别:图像识别是目的,具体而言,输入一张图片,输出一个字符串或数字。例如输入一张狗图片,输出狗的品种,这是典型典型的字符串输出,属于图像识别中的分类。输入一张花朵的照片,输出花瓣的个数,这是典型的数字输出,属于图像识别中的回归。

2)人工神经元:任何一篇介绍神经网络的文章都会给出详细的说明,这里不再重复,只说明一个注意点,就是神经元的输入。神经元的输入一般可以写成多个1*1的数,也就可以写成一个向量,但图像识别中,神经元的输入很可能是图片,而图片相当于矩阵,因此实际中可以认为,把矩阵拉开成向量,即reshape后作为输入。

3)神经网络:多个神经元组合在一起的网络,当然,一般还可以加如其他的元件,比如卷积、池、归一化等等。

4)深度学习:这个概念要分成两个来看。深度,说的是神经网络及其附属元件的层数,这个数越大,就说明整个网络越深,也就越复杂。学习,说的是神经网络中各元件参数(权重)的确定方法,并不是解方程计算或者瞎猜或者推导,而是通过自主学习的方式。学习,就是给一堆样本的意思。

2.神经网络训练

2.1核心代码

神经网络训练的核心代码只有两条,分别对于图像识别中的分类和回归,分别是:

分类:net = trainNetwork(imdsTrain,layers,options);

回归:net = trainNetwork(XTrain,YTrain,layers,options);

其中,net自然就是训练的结果,layers是神经网络的结构,options是训练方法,其他的是样本数据

2.2神经网络结构

神经网络的结构是按照层来区分的,比如第一层输入层,最后一层输出层,中间有神经元层,卷积层,池层等等。而在matlab中构建这些层可以说是非常简单了,只要layers=[lay1 lay2 lay3]一直下去即可。其中layi的定义方式,可以参考帮助文档中Neural Network Toolbox Functions - By Category里面Deep Learning Training from Scratch目录下,所有带layer的函数。比如lay1=imageInputLayer()就定义了第一层为图像输入层,当然括号里应该有一些信息,比如输入图像的大小,黑白或彩色信息。

2.3样本数据

对分类神经网络而言,虽然软件提供了很多导入样本的方法,但真正便利的其实就一种:

1)把图片按类存放在不同的文件夹下,比如“狗”文件夹下放一堆狗的图片,“猫”文件夹下放一堆图片,并把“猫”、“狗”这样的东西作为文件夹的名字;

2)把这些文件夹放在同一个文件夹下;

3)代码:imds = imageDatastore(最外层文件夹名, ‘IncludeSubfolders’,true,‘LabelSource’,‘foldernames’);

4)对图片大小不统一之类的,处理略复杂,可以借用imageDatastore的readfcn来完成。

对回归神经网络而言,我没有找到特别的导入方式,基本上XTrain,YTrain都是数值矩阵,其中:

1)XTrain为4维矩阵,size(XTrain)=[输入图片宽度, 输入图片高度, 1或者3, 样本个数],其中1表示黑白,3表示彩色

2)YTrain为一维向量,size(YTrain)=[样本数个, 1]

2.4训练方法

options的调试,可能是世上最难的了,能调试的东西,基本都是后验的,只能依靠经验。

3.神经网络的使用

训练后,我们获得了net,调用方法相当死板

分类:Ynew = classify(net,imdsnew);

回归:Ynew = predict(net,Xnew);

当然,有时候,我们并不需要自己训练net,拿别人训练好的来玩玩也是不错的,这方面,软件提供了一些知名的网络:alexnet,vgg16,vgg19,googlenet,resnet50等等,通过add on搜索并安装即可使用。

4.后序

matlab提供了很方便的调用方式,但如何调用,如何安排神经网络的结构,如何准备和分配样本,如何设定学习过程与参数调试,这就是人脑的事情了。

https://www.ilovematlab.cn/blog-465733-133.html

你可能感兴趣的:(matlab在图像识别(深度学习神经网络)中的使用(转))