前言
分享一份之前上神经网络课上布置的练习题Demo。参数什么的可能在不同电脑上需要有所调整,还望用餐愉快。
题目
设计实现模糊控制规则为T = int((e+ec)/2)的模糊神经网络控制器,其中输入变量e和ec的变化范围分别是:e = int[-2, 2],ec = int[-2, 2]。网络设计的目标误差为0.001。
解答
1.网络结构
输入输出数据根据题意列出:
P=[-2 -2 -2 -2 -2 -1 -1 -1 -1 -1 0 0 0 0 0 1 1 1 1 1 2 2 2 2 2; -2 -1 0 1 2 -2 -1 0 1 2 -2 -1 0 1 2 -2 -1 0 1 2 -2 -1 0 1 2 ];
T=[-2 -2 -1 -1 0 -2 -1 -1 0 0 -1 -1 0 0 1 -1 0 0 1 1 0 0 1 1 2];
因此输入为25组样本,需要输入节点数为2,输出节点数仅需1即可。
由于输入输出节点数很少,因此优先考虑单层隐含层神经网络。即网络结构初步定为2-S1-1,隐含层采用S型正切激活函数,输出层采用线性激活函数,隐含层节点数待定。
2. 隐含层节点数S1的确定
确定隐含层节点数需要通过对S1取不同值的训练情况来分析,得出较好的S1作为确定的节点数。在此之前,需要大致初始化一个学习速率 lr。取最大训练次数epochs=10000 ;目标误差goal=0.001。
网络初始化及训练的MATLAB代码:
clear;
ec=[-2 -1 0 1 2];
%输入矢量,输入节点为2
P=[-2 -2 -2 -2 -2 -1 -1 -1 -1 -1 ...
0 0 0 0 0 1 1 1 1 1 2 2 2 2 2;
-2 -1 0 1 2 -2 -1 0 1 2 -2 -1 ...
0 1 2 -2 -