1 简介
1 模糊小波神经网络原理为了加强网络的自学习能力以及快速的适应战场环境变化,实现对目标威胁进行精确评估,将小波神经网络嵌入模糊模型的后件部分形成模糊小波神经网络,网络结构如图 2所示:前三层已在之前提到,第四层改为小波函数层,选择 Gaussian 函数的一阶偏导数 φ(x) = x ·exp(−0.5x2) 作为母小波函数,该函数具有较好的拟合性能,根据所选母小波,经过伸缩平移变换放入第二层的神经元中作为激活函数,可以表示为
![在这里插入图片描述 【预测模型】基于模糊小波神经网络目标威胁评估含matlab源码 _神经网络](https://s2.51cto.com/images/blog/202204/25004542_62657eb6ba1ed6257.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/format,webp/resize,m_fixed,w_1184)
2 部分代码
%FWNN 脚本文件,作为主程序使用
% 清理工作
close all
clear
% 关键变量
d = 5; % 用于输入的宽度
m = d; % 输入信号的个数
n = 5; % 关系函数的个数,模糊判断的个数,小波函数的个数
epoch = 2000; % 迭代次数
num_yangben = 49; % 数据个数
num_test = 12;
rate = 0.08; % 学习速率
mom = 0.5; % 冲量
% 产生试验数据
data = indata();
%result = plant(data);
result = data(:,d+1);
% TEST
file_yangben = '测试集.dat';
fid = fopen(file_yangben);
%u = fread(fid,[size_input_x,size_input_y],'float');
u_test = dlmread(file_yangben,',');
fclose(fid);
% 随机初始化各个参数于(0,1)
c = rand(m, n);
q = rand(m, n); % 注意:不能为零
a = rand(n, m);
b = rand(n, m);
w = rand(1, n);
% t-1迭代的参数值
pc = c;
pq = q;
pa = a;
pb = b;
pw = w;
% t+1迭代的参数值
nc = zeros(m, n);
nq = zeros(m, n);
na = zeros(n, m);
nb = zeros(n, m);
nw = zeros(1, n);
% 用于画图的数据
tu = zeros(epoch, num_yangben);
E = zeros(epoch, num_yangben);
%
end
toc % 结束计时,并显示时间
figure(1)
% 图形显示统计信息
k = 1 : 1 : num_yangben;
ttu = tu(epoch, :);
plot(k, result, '-', k, ttu, '-r')
legend('样本集结果', '样本集预测值')
title('训练结果');
xlabel('样本');
ylabel('优先级');
%%============================================================'
%%测试
%%===========================================================
for loop2 = 1 : 1 : num_test
% 初始化中间数据
x = zeros(1, m);
g = zeros(m, n);
U = zeros(1, n);
p = zeros(1, n);
W = zeros(1, n);
%y = zeros(1, n);
% 给输入节点赋值
for i = 1 : 1 : d
x(i) = u_test(loop2,i);
end
%for i = 1 : 1 : d
% x(m + 1 - i) = result(loop2 - i);
%end
% 计算第二层节点的输出值
for i = 1 : 1 : m
for j = 1 : 1 : n
g(i, j) = relation(x(i), c(i, j), q(i, j));
end
end
% 计算第三层节点的输出,同时记录第三层节点的选择信息
for i = 1 : 1 : n
[min, which] = fuzzy(g, m, i);
U(i) = min;
p(i) = which;
end
% 计算第四层节点的输出
for i = 1 : 1 : n
for j = 1 : 1 : m
W(i) = W(i) + wavelet(x(j), a(i, j), b(i, j));
end
end
y = w .* W;
% 计算最终的输出
result_test(loop2) = defuzz(U, y, n);
end
figure(2)
% 图形显示测试信息
k = 1 : 1 : num_test;
plot(k, u_test(:,6), 'g',k, result_test, 'r')
legend('测试集结果', '测试集预测值')
title('测试结果');
xlabel('样本');
ylabel('优先级');
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
- 31.
- 32.
- 33.
- 34.
- 35.
- 36.
- 37.
- 38.
- 39.
- 40.
- 41.
- 42.
- 43.
- 44.
- 45.
- 46.
- 47.
- 48.
- 49.
- 50.
- 51.
- 52.
- 53.
- 54.
- 55.
- 56.
- 57.
- 58.
- 59.
- 60.
- 61.
- 62.
- 63.
- 64.
- 65.
- 66.
- 67.
- 68.
- 69.
- 70.
- 71.
- 72.
- 73.
- 74.
- 75.
- 76.
- 77.
- 78.
- 79.
- 80.
- 81.
- 82.
- 83.
- 84.
- 85.
- 86.
- 87.
- 88.
- 89.
- 90.
- 91.
- 92.
- 93.
- 94.
- 95.
- 96.
- 97.
- 98.
- 99.
- 100.
- 101.
- 102.
- 103.
- 104.