@devilogic
2016-08-02T14:11:13.000000Z
字数 2280
阅读 1347
matlab
这篇主要讲解数据输入格式如何影响网络的仿真的。首先我们从静态网络开始讨论,然后讨论连续动态网络。
下面有两种基础类型的输入向量:它们同时存在(在同一时刻,或者在特定的时间序列),在同一时间发生。对于同时存在的向量,顺序不是非常重要的,如果有一组神经网络并发的运行,你可以为每个神经网络提供一个输入向量。对于连续的向量,顺序是重要的。
对于并行输入静态网络的仿真是最简单的一种情况(没有反馈与延迟)。在这种情况下,你可以不用考虑特定时间序列的输入对仿真的影响,可以将输入视为并行的。下面是一个非常简单的例子:
通过以下代码来设定这个前向网络:
net = linearlayer; % 使用线性函数
net.inputs{1}.size = 2; % 有两个输入单元
net.layers{1}.dimensions = 1; % 仅有一个隐藏层,这层只有一维
简易的指定权值矩阵与偏置值为。
通过下面的代码指定:
net.IW{1,1} = [1 2]; % 输入权重两个
net.b{1} = 0; % 偏置值为0
假设网络仿真数据集合由个并行向量构成:
P = [1 2 2 3; 2 1 3 1] % 单位是以列向量
你可以通过以下代码进行仿真这个网络:
A = net(P)
A =
5 4 8 5
提供单个并行向量组成的矩阵给网络,它会产生一个矩阵作为输出,输出结果应该与并行化使用四个网络一起运算然后每个网络返回结构后组合到一起的向量一致。输入向量的提供给网络的顺序并不重要,因为它们之间相互没有影响。
当一个神经网络包含延迟器,输入向量必须按照应有的顺序依次输入到网络中。下一张图将显示一个简单的包含单个延迟的网络。
下面这些代码将创建网络:
net = linearlayer([0 1]);
net.inputs{1}.size = 1; % 输入单元为1
net.layers{1}.dimensions = 1;
net.biasConnect = 0; % 偏置值为0
指定权重矩阵。
下面的命令设定输入权重矩阵:
net.IW{1,1} = [1 2];
输入向量队列可能是:
P = {1 2 3 4}; % 这里是cell数组类型
你可以这样简单的仿真网络:
A = net(P)
A =
[1] [4] [7] [10]
你输入一个包含输入队列的cell数组,网络将输出一个cell数组队列。输入向量的顺序是非常重要的。在这种情况下,输出将计算当前的输入元素乘以1()然后加上前一个的输入元素乘以2()。这样当输入顺序改变时,最终输出结果也将改变。
如果你使用同样的输入但是使用并行输入替代串行输入,你将得到一个完全不同的结果。(但是,你必须清楚你为什么要私用这样的输入在一个动态网络上)。它将每个输入并行化的传输给网络。上一个列子:你的输入时:
P = [1 2 3 4]; % 这里是向量类型
仿真网络后得到:
A = net(P)
A =
1 2 3 4
结果与你将每个输入并行化输入到一个分离式网络一样。前提是你不能指定网络的延迟值,它们默认为0。因为这样,你的输出将简单的将当前的输入乘以1()。
在其他情况,你也许想让网络仿真当同一时间输入几种不同的输入序列。在这种情况,你要提供给网络一组输入序列几何。例如以下两组序列。
P = {[1 4] [2 3] [3 2] [4 1]};
然后仿真网络:
A = net(P);
结果将会是:
A = {[1 4] [4 11] [7 8] [10 5]}
正如你看到的,每个矩阵的第一个列的输出是由第一个输入序列产生,这与较早的例子一样。每个矩阵第二列的输出是由第二个输入序列产生。当分别应用这两组输入序列到一个并行网络时,这两组输入序列之间没有任何关系。
下图显示了一个通常的输入序列的格式,输入当有个时间点的个序列。一个简单的输入向量就可以覆盖所有不同的状况。这个cell数组的每个元素是一个在同一时间点的不同并行向量的值组成的矩阵。如果存在多个输入向量序列,那么cell数组的每个元素将是一个多行的矩阵。
就好比是一个人,好比这个人在时间点的行为值,表示这个人在时间点的行为值。
在这篇文章中,你将应用串行输入与并行输入到一个动态网络,在仿真并行输入的静态网络一节中,你应用并行输入到一个静态网络。也可以使用一个串行输入序列到一个静态网络。它将不改变网络仿真的结果,但是它将影响网络的训练。这些会在理解神经网络训练一文中详细探讨。