背景:
最近看到一个国外小哥用python写的介绍神经网络帖子。写的很详细,也很清楚。本文就不再累述,那怎么用matlab来实现他呢。其实很简单。
tips:此小哥博客为https://victorzhou.com/blog/intro-to-neural-networks/
本文有部分图来源于此,侵权删。
基本步骤:
1.选择合适的神经网络
下图就是一个简单的BP(back propagation)神经网络。由于我们希望由人的身高和体重来判断此人的性别,所以此神经网络被设计为2个输入层(身高/体重)、几层隐含层、1个输出层(性别)。不同的layer之间的神经元互相连接,连接方式为线性加权。此处隐藏层神经元数目被设计成2个,是因为训练样本数为4。一般的,对于这种神经网络,隐藏节点数的选择需要满足两个条件:
a.需要小于N-1(N为样本数)。
b.训练样本数需要多于网络模型的连接权数。一般是2-10倍。
事实上,只要隐层神经元数目足够多,该网络就能以任意精度逼近一个非线性函数。而神经元数目太少会造成网络的不适性,而神经元数目太多又会引起网络的过适性。同时,这种神经网络具有把外界刺激和输入信息进行联想记忆的能力。这是因为它采用了分布并行的信息处理方式,对信息的提取必须采用联想的方式,才能将相关神经元全部调动起来。
2.确定激活函数
激活函数的作用是将无限制的输入转换为可预测形式的输出。我们在此调用的激活函数是:
f(x) = 1 / (1 + exp(-x))
其在笛卡尔坐标系内的图形如下图所示:
使用python中的数学工具Numpy调用的函数名为sigmoid(x),在Matlab中,则是调用的logsig(x)函数。从函数的图形可以看出,通过此激活函数,不论x输入时多少,输出都被限制在(0,1)之间。和激活函数tanh类似(-1,1),这两种激活函数适合做概率值的处理,例如LSTM中的各种门;而ReLU就不行,因为ReLU无最大值限制,可能会出现很大值。
3.定义评价函数
在训练神经网络之前,我们需要有一个标准定义它到底好不好,以便我们进行改进,这就是损失(loss&#