MATLABfeedforwardnet
函数返回一个具有文档中描述的属性的神经网络对象。创建具有预训练权重的神经网络的工作流程如下:
- 加载数据
- 创建网络
- 配置网络
- 初始化权重和偏差
- 训练网络
步骤 1、2、3 和 5 与从头开始创建神经网络时完全相同。让我们看一个简单的例子:
% 1. Load data
load fisheriris
meas = meas.';
species = species.';
targets = dummyvar(categorical(species));
% 2. Create network
net = feedforwardnet([16, 16]);
% 3. Configure the network
configure(net, meas, targets)
现在,我们有一个net
具有 4 个输入(萼片和花瓣长度和宽度)和 3 个输出('setosa'、'versicolor' 和 'virginica')的神经网络。我们有两个隐藏层,每个隐藏层有 16 个节点。权重存储在两个字段net.IW
和net.LW
中,其中IW
是输入w八,并且是层w八:LW
>> net.IW
ans =
3×1 cell array
[16×4 double]
[]
[]
>> net.LW
ans =
3×3 cell array
[] [] []
[16×16 double] [] []
[] [3×16 double] []
起初这令人困惑,但很有意义:这两个单元格数组中的每一行都对应于我们拥有的一个层。
在IW
数组中,我们有输入和每一层之间的权重。显然,我们只有输入和第一层之间的权重。这个权重矩阵的形状是16x4
,因为我们有4
输入和16
隐藏单元。
在LW
数组中,我们有从每一层(行)到每一层(列)的权重。在我们的例子中,我们有一个16x16
从第一层到第二层的3x16
权重矩阵,以及一个从第二层到第三层的权重矩阵。完全有道理,对吧?
这样,我们就知道如何初始化我们从 RBM 代码中获得的权重:
net.IW{1,1} = weights_input;
net.LW{2,1} = weights_hidden;
有了这个,您可以继续第 5 步,即以监督方式训练网络。