一、newp
设计一
newp函数用于生成一个感知器神经网络,以解决线性可分的分类问题,后两个输入参数是可选的,如果采用默认值,可以简单地采用 n e t = n e w p ( P , T ) net=newp(P,T) net=newp(P,T)的形式来调用。
net=newp(P, T, TF, LF);
- P P P: P P P是一个 R × 2 R \times 2 R×2矩阵,矩阵的行数R等于感知器网络中输入向量的维数。矩阵的每一行表示输入向量每个分量的取值范围。如 P = [ − 1 1 0 1 ] P=\begin{bmatrix} -1&1\\ 0&1\end{bmatrix} P=[−1011],表示输入向量是2维向量 [ x 1 , x 2 ] [x_1,x_2] [x1,x2],且 − 1 ≤ x 1 ≤ 1 -1 \leq x_1 \leq 1 −1≤x1≤1, 0 ≤ x 2 ≤ 1 0 \leq x_2 \leq 1 0≤x2≤1。因此,矩阵 R R R的第二列数字必须大于等于第一类数字,否则系统将会报错。
- T T T:表示输出节点的个数,标量。
- T F TF TF:传输函数,可取值为 h a r d l i m hardlim hardlim或 h a r d l i m s hardlims hardlims,默认值为 h a r d l i m hardlim hardlim。
- L F LF LF:学习函数,可取值为 l e a r n p learnp learnp或 l e a r n p n learnpn learnpn,默认值为 l e a r n p learnp learnp。
- n e t net net:函数返回创建好的感知器网络。
二、newff
设计二
net = newff(P, T, S)
- P: R × Q 1 R \times Q1 R×Q1矩阵,表示创建的神经网络中,输入层有R个神经元。每行对应一个神经元输入数据的典型值,实际应用中常取其最大最小值。
- T: S N × Q 2 SN \times Q2 SN×Q2矩阵,表示创建的网络有SN个输出层节点,每行是输出值的典型值。
- S:标量或向量,用于指定隐含层神经元个数,若隐含层多于一层,则写成行向量的形式。
- net:返回一个 l e n g t h ( S ) + 1 length(S)+1 length(S)+1层(不包括输入层)的BP网络。
三、train
训练
train函数用于训练创建好的感知器网络,事实上,train函数可以训练所有神经网络(径向基函数等不需要训练的除外)。
[net, tr] = train(net, P, T, Pi, Ai)
- net:需要训练的神经网络,对于感知器,net是newp函数的输出。train根据 n e t . t r a i n F c n net.trainFcn net.trainFcn和 n e t . t r a i n P a r a m net.trainParam net.trainParam进行训练。
- P:网络输入。P是 R × Q R \times Q R×Q输入矩阵,每一列是一个输入向量,R应等于网络的输入节点个数,共有Q个训练输入向量。
- T:网络期望输出。这个参数是可选的对于无监督学习,不需要期望输出。T是 S × Q S \times Q S×Q矩阵,每一列是一个输出向量,S应等于输出节点个数,共有Q个输出,Q值应与输入向量的个数相等。T默认值为零。
- Pi:初始输入延迟,默认值为零。
- Ai:初始的层延迟,默认值为零。
- net:训练好的网络。
- tr:训练记录,包括训练的步数epoch和性能perf。
四、sim
仿真
sim函数用于仿真一个神经网络。
[Y, Pf, Af] = sim(net, P, Pi, Ai)
- net:训练好的神经网络。
- P:网络的输入。若P是矩阵,则每一列是一个输入向量,列数等于输入向量的个数。
- Pi:网络的初始输入延迟,默认值为零。
- Ai:网络的初始层延迟,默认值为零。
- Y:网络对输入P的实际输出。
- Pf:最终输出延迟。
- Af:最终的层延迟。
五、设计神经网络的流程
(1)设计神经网络
newp:输入向量的维数,输入向量每个分量的取值范围,输出节点的个数,传输函数,学习函数,最终得到创建好的感知器网络
newff:输入层的神经元个数,每一个神经元输入数据的典型值,输出层结点的个数,隐含层神经元个数,最终得到一个BP网络
(2)训练神经网络
设计好的神经网络,输入向量(隐含输入节点的个数,输入向量的个数),期望输出向量(隐含输出节点的个数,输出向量的个数,输出向量应与输入向量的个数相等),最终得到训练好的神经网络,以及训练记录(包括训练的步数epoch和性能perf)
(3)仿真
训练好的神经网络,输入向量(隐含输入向量的个数),初始输入延迟与初始层延迟,最终得到输出、最终输出延迟与最终的层延迟
六、神经网络工具箱
1、Neural Network
该部分展示了神经网络的结构,从结构图中可以看出该网络有三个隐含层,神经元个数分别为9、8、7
2、Algorithms
Data Division:该网络采用随机划分的方法将数据集划分为training set、validation set、test set
Training:该网络采用Levenberg–Marquardt算法进行训练
Performance:该网络采用均方误差算法计算误差
Calculations:该网络保存为mex格式
3、Progress
Epoch:该网络允许的迭代次数最大为1000,实际迭代5次
Time:该网络训练时长为3秒
Performance:该网络最大误差为0.475,目标误差为0.001,实际误差为0.00052,可在Plots中的Performance中详细查看
Gradient:该网络的最大梯度为1.91,梯度阈值为1e-7,实际梯度为0.033。可在Plots中的Training State中详细查看
Mu:该网络所使用Levenberg-Marquardt算法中的阻尼因子最小值为0.001,阈值为1e-10,实际值为1e-6,Mu值越大意味着算法收敛效果越好。可在Plots中的Training State中详细查看
Validation Checks:该网络的泛化能力检查标准,实际值为0表示在训练过程中误差在持续降低,若连续6次训练误差无法降低,则结束训练任务。可在Plots中的Training State中详细查看
注 意 , 1 e − 7 = 1 × 1 0 − 7 注意,1e-7=1 \times 10^{-7} 注意,1e−7=1×10−7
4、Plots
Performance:该网络训练过程中的误差变换可视化
Training State:该网络训练过程中的梯度、Mu因子和泛化能力变换等信息的可视化
Regression:该网络训练集、验证集、测试集的回归能力可视化
Plot Interval:图中横坐标的刻度
七、基础概念
Epoch(时期):将所有训练样本训练一次的过程。
Batch(批 / 一批样本):将整个训练样本分成若干个Batch。
Batch_Size(批大小):每批样本的大小。
Iteration(一次迭代):训练一个Batch就是一次Iteration。
示例
mnist数据集有60000张图片作为训练数据,10000张图片作为测试数据。假设现在选择Batch_Size=100对模型进行训练。迭代30000次。
- 每个Epoch要训练的图片数量:60000(训练集上的所有图像)
- 训练集具有的Batch个数: 60000 / 100 = 600 60000/100=600 60000/100=600
- 每个Epoch需要完成的Batch个数:600
- 每个Epoch具有的Iteration个数:600(完成一个Batch训练,相当于参数迭代一次)
- 每个Epoch发生模型权重更新的次数:600
- 训练10个Epoch后,模型权重更新的次数: 600 × 10 = 6000 600 \times 10=6000 600×10=6000
- 不同Epoch的训练,其实用的是同一个训练集的数据。第一个Epoch和第10个Epoch虽然用的都是训练集的60000张图片,但是对模型权重更新值却是完全不同的。因为不同Epoch的模型处于代价函数空间上的不同位置,模型的训练越靠后,越靠近谷底,其代价越小
- 总共完成30000次迭代,相当于完成了 30000 / 600 = 50 30000/600=50 30000/600=50个Epoch,即训练了50次