目录
1.算法描述
人工神经网络(Artificial Neural Networks,简写为ANNs)也简称为神经网络(NNs)或称作连接模型(Connection Model),它是一种模仿动物神经网络行为特征,进行分布式并行信息处理的算法数学模型。这种网络依靠系统的复杂程度,通过调整内部大量节点之间相互连接的关系,从而达到处理信息的目的。
生物神经网络主要是指人脑的神经网络,它是人工神经网络的技术原型。人脑是人类思维的物质基础,思维的功能定位在大脑皮层,后者含有大约10^11个神经元,每个神经元又通过神经突触与大约103个其它神经元相连,形成一个高度复杂高度灵活的动态网络。作为一门学科,生物神经网络主要研究人脑神经网络的结构、功能及其工作机制,意在探索人脑思维和智能活动的规律。
人工神经网络是生物神经网络在某种简化意义下的技术复现,作为一门学科,它的主要任务是根据生物神经网络的原理和实际应用的需要建造实用的人工神经网络模型,设计相应的学习算法,模拟人脑的某种智能活动,然后在技术上实现出来用以解决实际问题。因此,生物神经网络主要研究智能的机理;人工神经网络主要研究智能机理的实现,两者相辅相成。
神经网络的输入层的每一个节点代表的是一个对象的其中的一个特征,这个些特征可以用一个矩阵x表示,因为这是我们人类看的懂的东西,所以要转换成计算机看的懂的东西。使用函数进行计算,w是权重,b是偏置。神经网络
y=w1x+b1
其中输如层有3个节点是一个1x3的矩阵,对应的隐藏是一个1x4的矩阵,则要乘以w1是一个3x4的矩阵,b是一个1x4的矩阵。
其中神经网络还需要一个激活函数,常用的有的sigmoid,relu,tanh,因为神经网络对应的是一个线性化的函数,我们有的时候要解决非线性化的问题,所以引入激活函数,解决线性模型不能解决的问题。
func_data_process.m
这个函数,主要功能就是识别数据中的数据,然后分别统计出每年的数据,每个月的数据以及每天的数据。
func_NN_prediction.m
这个函数,是利用训练得到的神经网络进行预测的函数,其主要功能就是将测试数据输入,输出预测数据。
func_NN_train.m
这个函数,是神经网络训练函数,通过对测试数据集和目标测试集进行训练,得到一个神经网络,其中所涉及的非线性函数为:
main_func.m
这个函数就是对数据处理,神经网络训练,神经网络测试三个主要函数进行调用,实
NN_parameter_define.m
神经网络的一些参数定义;
2.仿真效果预览
matlab2022a仿真结果如下:
3.MATLAB核心程序
%神经网络参数初始化调用
NN_parameter_define;
%网络训练
%循环开始,进化网络
for Iter=1:Iteration_times
Iter
%对输入的每个数据进行处理
for k=1:length(Data_IN)
In = Data_IN(k);
%输出层结算
for i=1:Num_node_IN
for j=1:Num_node_HIDE
%定义非线性函数
u(i,j) = exp(-(In(i)-nodec(j,i))^2/nodeb(j,i));
end
end
W = u(1,:);
Ws = sum(W);
for i=1:Num_node_HIDE
HIDE_data(i) = Iter_b(i) + Iter_b2(i) * In;
end
HIDE_W = HIDE_data*W';
%网络预测计算
OUT(k) = HIDE_W/Ws;
ERR(k) = Data_OUT(k)-OUT(k);
P_point = zeros(Num_node_HIDE,1);
P_point = COFF_1 * ERR(k) * W ./ Ws;
P_point = P_point';
B_point = zeros(Num_node_HIDE,Num_node_IN);
for i=1:Num_node_HIDE
for j=1:Num_node_IN
B_point(i,j) = COFF_1 * ERR(k) * ( HIDE_data(i) * Ws - HIDE_W ) * ( In(j) - nodec(i,j) )^2 * W(i) / (nodeb(i,j)^2 * Ws^2);
end
end
B_point = zeros(Num_node_HIDE,Num_node_IN);
for i=1:Num_node_HIDE
for j=1:Num_node_IN
C_point(i,j) = 2 * COFF_1 * ERR(k) * ( HIDE_data(i) * Ws - HIDE_W ) * ( In(j) - nodec(i,j) ) * W(i) / (nodeb(i,j) * Ws^2);
end
end
%节点更新
Iter_a = Iter_b + P_point + COFF_2 * ( Iter_b - Iter_c );
Iter_a2 = Iter_b2 + P_point*In + COFF_2 * ( Iter_b2 - Iter_c2);
nodeb = nodeb1 + B_point + COFF_2 * ( nodeb1 - nodeb2 );
nodec = nodec1 + C_point + COFF_2 * ( nodec1 - nodec2 );
%延迟赋值
Iter_c = Iter_b;
Iter_b = Iter_a;
Iter_c2 = Iter_b2;
Iter_b2 = Iter_a2;
nodec2 = nodec1;
nodec1 = nodec;
nodeb2 = nodeb1;
nodeb1 = nodeb;
end
end
05_007_m
4.完整MATLAB
V