主要内容

用浅神经网络分类模式

除了函数拟合,神经网络也擅长识别模式

例如,假设您想将一个肿瘤为良性或恶性,基于均匀的细胞大小、丛厚度、有丝分裂等。你有699例病例,你有9特性和正确的分类为良性或恶性。

与拟合函数,有两种方法可以解决这个问题:

一般来说,最好先从应用程序,然后使用应用程序自动生成的命令行脚本。使用方法之前,首先定义通过选择一个数据集的问题。每个神经网络应用程序可以访问许多样本数据集,您可以使用与工具箱(见实验浅神经网络的样本数据集)。如果你有一个你想解决具体的问题,你可以将自己的数据加载到工作区。下一节描述了数据格式。

提示

交互式地建立和培训深度网络,使用深层网络设计师

定义一个问题

定义一个模式识别问题,安排一组输入向量(预测)列在一个矩阵。然后安排另一组响应向量表示的类被分配的观察。

当只有两类,每个响应都有两个元素,0和1,表示相应的观测属于哪个阶级。例如,您可以定义一个两级分类问题如下:

预测= [7 10 3 1 6;5 8 1 1 6;6 7 1 1 6];反应= [0 0 1 1 0;1 1 0 0 1);
包括五个观测的数据,每个都有三个特性,分为两类。

当预测分为N不同类型的反应N元素。对于每一个反应,一个元素是1和其他人都是0。例如,下面的线显示了如何定义一个分类问题,5-by-5-by-5立方体的角落分为3类:

  • 原点(第一个输入向量)的一个类

  • 离原点最远的角落(最后一个输入向量)在第二个类

  • 第三个班上所有其他点

预测= [0 0 0 0 5 5 5 5;0 0 5 5 0 0 5 5;0 5 0 5 0 5 0 5);反应= [1 0 0 0 0 0 0 0;0 1 1 1 1 1 1 0;0 0 0 0 0 0 0 1);
的数据由八个观察,每个都有三个特性,分为三个类别之一。

下一节将展示如何训练一个网络识别模式,使用神经网络模式识别应用。这个例子使用数据集工具箱提供的一个例子。

使用神经网络模式识别的应用分类模式

这个例子展示了如何培养一个浅神经网络分类模式使用神经网络模式识别应用程序。

打开神经网络模式识别应用程序使用nprtool

nprtool

选择数据

神经网络模式识别应用程序示例数据帮助你开始训练一个神经网络。

进口玻璃分类数据,选择进口>进口玻璃数据集。您可以使用此数据集训练一个神经网络分类玻璃窗口或non-window,使用性能的玻璃化学。如果你导入自己的数据文件或工作区,您必须指定预测和响应,观察是否行或列。

导入的数据中出现的信息模型的总结。这个数据集包含214年观察,每9特性。每一个观察是分为两类:一类窗口或non-window。

将数据分为训练、验证和测试集。保持默认设置。数据分为:

  • 70%的训练。

  • 15%验证网络推广和过度拟合之前停止训练。

  • 15%的独立测试网络泛化。

数据部分的更多信息,请参阅把最优的神经网络训练数据

创建网络

乙状结肠的网络是一个两层的前馈网络隐层的传递函数和softmax传递函数在输出层。隐层的大小对应于隐藏的神经元的数目。默认的图层大小10。你可以看到的网络体系结构网络窗格。输出神经元的数量设置为2,等于指定的类的数量响应数据。

列车网络的

训练网络,点击火车

培训窗格中,您可以看到培训的进展。培训持续进行直到满足停止条件之一。在这个例子中,培训持续进行直到验证错误增加连续六个迭代(“满足验证准则”)。

分析结果

模型的总结包含的信息为每个数据集训练算法和训练的结果。

您可以进一步分析结果通过生成的情节。情节的混淆矩阵,情节部分中,点击混淆矩阵。网络输出是非常准确的,你可以看到大量的正确分类在绿色广场(对角线)和低数量的错误分类的红色广场(非对角的)。

查看ROC曲线来获得额外的网络性能验证。在情节部分中,点击ROC曲线

彩色的线在每个轴代表中华民国曲线。ROC曲线是一块真正的积极率(灵敏度)和假阳性率(1 -特异性)阈值是不同的。一个完美的测试将显示在左上角,敏感性为100%,特异性100%。对于这个问题,网络执行得很好。

如果你是不满意的网络性能,你可以做以下之一:

  • 再次培训网络。

  • 增加隐藏的神经元。

  • 使用一个更大的训练数据集。

如果性能在训练集是好的但测试集的性能很差,这可能表明模型过度拟合。减少神经元的数量可以减少过度拟合。

你也可以评估额外的测试集上的网络性能。加载额外的测试数据来评估网络,测试部分中,点击测试。的模型的总结显示了额外的测试结果。你也可以产生额外的情节分析测试结果。

生成代码

选择生成代码>生成简单的培训脚本创建MATLAB代码复制从命令行前面的步骤。创建MATLAB代码是很有用的,如果你想学习如何使用命令行功能的工具箱来定制培训过程。在使用命令行功能分类模式,您将更详细地研究生成的脚本。

出口网络

你可以导出你的训练网络工作区或仿真软件®。金宝app你也可以用MATLAB编译器部署网络™和其他MATLAB代码生成工具。出口培训网络和结果,选择出口模式>出口到工作区

使用命令行功能分类模式

最简单的方法来学习如何使用命令行功能的工具箱是生成脚本的应用程序,然后修改它们定制网络培训。作为一个例子,看看在前一节中创建的简单脚本使用神经网络模式识别应用程序。

%解决模式识别问题的神经网络%脚本生成的神经模式识别应用% 22 - 3月- 2021 16:50:20创建%%这个脚本假设这些变量定义:%% glassInputs——输入数据。% glassTargets——目标数据。x = glassInputs;t = glassTargets;%选择培训功能%为所有培训功能的列表类型:帮助nntrain%的trainlm通常是最快的。%的trainbr花费更长的时间,但是这可能是更好的具有挑战性的问题。%的trainscg使用更少的内存。在低内存的情况下适用。trainFcn =“trainscg”;%比例共轭梯度反向传播。%创建一个模式识别网络hiddenLayerSize = 10;网= patternnet (hiddenLayerSize trainFcn);%设置部门的数据进行训练、验证测试net.divideParam。trainRatio = 70/100; net.divideParam.valRatio = 15/100; net.divideParam.testRatio = 15/100;%训练网络(净,tr) =火车(净,x, t);%测试网络y =净(x);e = gsubtract (t、y);性能=执行(净、t、y)点燃= vec2ind (t);yind = vec2ind (y);percentErrors =总和(点燃~ = yind) /元素个数(点燃);%查看网络视图(净)%的情节%取消这些线,使各种各样的情节。%,plotperform (tr)%,plottrainstate (tr)%,ploterrhist (e)%,plotconfusion (t, y)%,plotroc (t, y)

您可以保存脚本,然后从命令行运行它繁殖的结果之前的训练。你也可以编辑脚本定制培训过程。在这种情况下,按照脚本中的每个步骤。

选择数据

该脚本假设预测和响应向量已经加载到工作区。如果数据没有加载,您可以加载它如下:

负载glass_dataset
这个命令加载预测glassInputs和反应glassTargets进入工作区。

这个数据集的样本数据集的工具箱的一部分。可用的数据集的信息,看到浅神经网络的样本数据集。你也可以看到所有可用的列表数据集通过输入命令帮助nndatasets。你可以从这些数据集加载变量使用自己的变量名。例如,命令

[x, t] = glass_dataset;
将玻璃预测加载到数组x和玻璃反应到数组中t

选择训练算法

定义训练算法。

trainFcn =“trainscg”;%比例共轭梯度反向传播。

创建网络

创建网络。模式识别(分类)的默认网络问题,patternnet,是一个前馈网络默认乙状结肠隐层传递函数,以及softmax传递函数在输出层。网络与十单隐层神经元(默认)。

网络有两个输出神经元,因为有两个响应值(类)与每个输入向量。每个输出神经元代表一个类。当一个适当的输入向量类是应用于网络,相应的神经元应该产生一个1,其他神经元应该输出一个0。

hiddenLayerSize = 10;网= patternnet (hiddenLayerSize trainFcn);

请注意

更多的神经元需要更多的计算,他们倾向于overfit数据当数量设置过高,但是他们允许网络解决更复杂的问题。层需要更多的计算,但其使用可能导致网络更有效地解决复杂的问题。使用多个隐层,输入隐藏层大小的数组元素patternnet命令。

把数据

设置部门的数据。

net.divideParam。trainRatio = 70/100; net.divideParam.valRatio = 15/100; net.divideParam.testRatio = 15/100;

这些设置,预测向量和响应向量随机划分,为70%的训练,15%的验证和测试为15%。数据划分过程的更多信息,请参阅把最优的神经网络训练数据

列车网络的

培训网络。

(净,tr) =火车(净,x, t);

在培训期间,培训进度窗口打开。你可以中断训练在任何时候通过点击停止按钮

神经网络训练进度窗口

培训结束时,验证错误增加连续六个迭代,这发生在迭代14。

如果您点击性能在培训窗口中,一块训练错误,验证错误,和测试出现错误,如下图所示。

交叉熵误差对数字时代的训练、验证和测试数据。最好的验证性能是0.058432时代8。

在本例中,结果是合理的作为最终叉误差很小。

测试网络

测试网络。网络训练后,您可以使用它来计算网络输出。下面的代码计算出网络输出,错误,和总体性能。

y =净(x);e = gsubtract (t、y);性能=执行(净、t、y)
性能= 0.0659

你也可以计算观察分类错误的分数。在这个例子中,该模型有一个非常低的误分类率。

点燃= vec2ind (t);yind = vec2ind (y);percentErrors =总和(点燃~ = yind) /元素个数(点燃)
percentErrors = 0.0514

也可以只计算网络性能测试集,通过使用测试指标,位于培训记录。

点燃= tr.testInd;tstOutputs =净(x(:,点燃));tstPerform =执行(净,t(点燃),tstOutputs)
tstPerform = 2.0163

查看网络

查看网络图。

视图(净)

模式识别网络的图形表示。网络输入大小9日输出大小2,和一个隐藏层10码。

分析结果

使用plotconfusion函数来绘制混淆矩阵。你也可以画出混淆矩阵的每个数据集通过点击混乱在培训窗口中。

图,plotconfusion (t, y)

混淆矩阵的输出和目标类。网络分类203输入正确和11输入错误。

对角线的绿色细胞显示正确分类的病例数,和非对角的红色细胞显示分类错误的情况下。结果显示很好的识别。如果你需要更准确的结果,你可以尝试下列方法:

  • 重置初始网络权值和新值的偏差初始化并再次培训。

  • 增加隐藏的神经元。

  • 使用一个更大的训练数据集。

  • 增加输入值的数量,如果更多的相关信息是可用的。

  • 尝试不同的训练算法(见训练算法)。

在这种情况下,网络的结果是令人满意的,你现在可以把网络上使用新的输入数据。

下一个步骤

在命令行操作来获得更多的经验,这里有一些任务你可以试试:

  • 在培训期间,打开一个绘图窗口(比如混乱情节),和看动画。

  • 从命令行情节等功能plotrocplottrainstate

每次神经网络训练会导致一个不同的解决方案由于随机初始重量和偏见价值观和不同部门的数据训练,验证集和测试集。结果,不同的神经网络训练同样的问题可以给不同的相同的输入输出。确保神经网络良好的准确性已经发现,培训几次。

还有其他几个技术改进初始解决方案如果需要更高的精度。金宝搏官方网站有关更多信息,请参见改善浅神经网络泛化,避免过度拟合

另请参阅

||||

相关的话题