上一章:
下一章:
-------------------------------------------翻译:xychn15@yahoo.com.cn--------------------------------
神经网络简单的例子
你的任务是建立并训练一个神经网络解决异或问题。异或函数在两个输入不等的情况下输出1。如表4.1.
为解决这个问题,我们需要一个前向神经网络,包含两个输入神经元,一个输出神经元。由于这个问题不是线性可分离的,所以还需要一个由两个神经元组成的隐含层。
/* eventuellt en bild på hur nätet ska se ut*/
现在我们知道神经网络的样子,但我们怎么建立?
建立前向神经网络使用命令 newff. 你必须输入 输入值得最大和最小值,每层神经元的数目和激活函数的选择。
>> net = newff([0 1; 0 1],[2 1],{'logsig','logsig'})
变量现在包含没有训练的前向神经网络,有两个神经元的输入层,两个神经元的隐含层和一个输出神经元,这正是我们想要的。 [0 1; 0 1]告诉 matlab 输入范围在0到1之间。{'logsig','logsig'} 告诉matlab 我们想使用 logsig 函数作为所有层的激活函数.第一个参数告诉网络输入层有多少神经元,因此你不需要在第二个参数中指定。你需要指定层的转移函数,不计算输入层。如果你不指定转移函数matlab将使用默认设置。
现在我们想测试一下没有训练的网络解决异或问题怎么样。首先我们建立输入矩阵。神经网络的输入通常是列矩阵。建立输入为 "1 1", "1 0", "0 1" 和 "0 0"的矩阵,我们输入:
>> input = [1 1 0 0; 1 0 1 0]
input =
1 1 0 0
1 0 1 0
现在我们已经建立输入到我们的网络。让我们把它们输入到网络中看会有什么结果。sim 命令用来仿真和计算网络的输出,想知道更多关于使用命令的信息输入 helpwin sim. 最简单的方法是输入网络的名字和输入矩阵的名字,将返回输出矩阵。
>> output=sim(net,input)
output =
0.5923 0.0335 0.9445 0.3937
>> target = [0 1 1 0]
target =
0 1 1 0
画点使用"plot"命令. 我们期望目标值是小圆圈,所以我们使用命令:
>> plot(target, 'o')
>> hold on得到的结果图像 (Fig 4.2) 很容易看出网络给出的不是我们想得到的结果。为了改变这个我们需要训练它。现在我们通过手动调节权值的方法来训练它。
>> plot(output, '+')
---------------------------------------------------------------------------------------
上一章:绪论