Main Content

创建、配置和初始化多层浅层神经网络

本主题介绍典型多层浅层网络工作流的一部分。有关详细信息和其他步骤,请参阅多层浅层神经网络与反向传播训练

在采集数据后,训练网络的下一步是创建网络对象。函数 feedforwardnet 创建一个多层前馈网络。如果在不带输入参量的情况下调用此函数,则会创建一个尚未进行配置的默认网络对象。然后可以使用 configure 命令配置生成的网络。

例如,文件 bodyfat_dataset.mat 包含一组预定义的输入向量和目标向量。输入向量定义关于人的身体属性的数据,目标值定义人的身体脂百分比。使用以下命令加载数据:

load bodyfat_dataset

加载该文件会创建两个变量。输入矩阵 bodyfatInputs 由 252 个不同人的 13 个身体属性变量组成的 252 个列向量组成。目标矩阵 bodyfatTargets 由对应的 252 个身体脂百分比组成。

下一步是创建网络。以下对 feedforwardnet 的调用创建一个两层网络,在隐藏层中有 10 个神经元。(在配置步骤中,输出层中的神经元数量设置为 1,即每个目标向量中的元素数。)

net = feedforwardnet;
net = configure(net, bodyfatInputs, bodyfatTargets);

可选参量可提供给 feedforwardnet。例如,第一个参量是包含每个隐藏层中神经元数量的数组。(默认设置为 10,这意味着一个隐藏层有 10 个神经元。一个隐含层通常就能产生很好的效果,但如果一个隐含层的效果不够好,您可以尝试使用两个隐含层。增加隐藏层中神经元的数量可增强网络的能力,但需要更多计算,并且更可能产生过拟合。)第二个参量包含要使用的训练函数的名称。如果没有提供参量,则默认层数为 2,隐藏层中神经元的默认数量为 10,默认训练函数为 trainlm。隐含层的默认传递函数是 tansig,输出层的默认传递函数是 purelin

configure 命令配置网络对象,它还初始化网络的权重和偏置;因此,网络已准备好接受训练。有时,您可能需要重新初始化权重或执行自定义初始化。初始化权重 (init)说明了初始化过程的细节。您也可以跳过配置步骤,直接开始训练网络。train 命令将自动配置网络并初始化权重。

其他相关架构

虽然两层前馈网络有能力学习几乎任何输入输出关系,但具有更多层的前馈网络可以更快地学习复杂的关系。对于大多数问题,最好从两层开始,如果两层的性能不令人满意,再增加到三层。

函数 cascadeforwardnet 创建级联前向网络。这些网络类似于前馈网络,但包括从输入到每层以及从每层到后续层的权重连接。例如,一个三层网络具有从第 1 层到第 2 层、从第 2 层到第 3 层以及从第 1 层到第 3 层的连接。该三层网络还具有从输入到所有三层的连接。额外的连接可能会提高网络学习所需关系的速度。

函数 patternnet 创建非常类似于 feedforwardnet 的网络,不同之处是它在最后一层使用 tansig 传递函数。该网络通常用于模式识别。其他网络可以学习动态或时间序列关系。

初始化权重 (init)

在训练前馈网络之前,您必须初始化权重和偏置。configure 命令会自动初始化权重,但您可能需要重新初始化它们。您可以使用 init 命令来执行此操作。该函数将网络对象作为输入,并返回已初始化所有权重和偏置的网络对象。以下是网络初始化(或重新初始化)的方式:

net = init(net);