查看: 1023|回复: 2|关注: 0

[已答复] 小波神经网络

[复制链接]

新手

5 麦片

财富积分


050


1

主题

3

帖子

0

最佳答案
发表于 2019-4-8 17:48:54 | 显示全部楼层 |阅读模式
在做一个小波神经网络技术在压力传感器上的温度补偿,程序是别人的,然后要添加一个性能指标来判断这个精度,绝对值或均方根误差等其他方法都可以。我同学帮我搞了一个,没太看懂,还被老师说误差太大,求大神指点。急用,害怕毕不了业。

训练结果

训练结果

回复主题 已获打赏: 0 积分

举报

新手

5 麦片

财富积分


050


1

主题

3

帖子

0

最佳答案
 楼主| 发表于 2019-4-8 17:51:57 | 显示全部楼层
这是程序!!!!谢谢!!!
clear;
clc;
close all;
input = [1:1:500]';
output = 3*input.*input+20+exp(input/100);
input_test = [1:2:500]';
output_test= 3*input_test.*input_test+20+exp(input_test/100);
%设置网络节点数

M = size(input,2); %输入层节点数(input:N x M)
n = 6; %隐含层节点数
N = size(output,2); %输出层节点数(output:N x 1)


%设置网络权值初始化

Wjk = randn(n,M);Wjk_1 = Wjk;Wjk_2 = Wjk_1; %输入层-隐含层权值
Wij = randn(N,n);Wij_1 = Wjk;Wij_2 = Wjk_1; %隐含层-输出层权值
a = randn(1,n);a_1 = a;a_2 = a_1; %小波函数的平移因子
b = randn(1,n);b_1 = a;b_2 = b_1; %小波函数的伸缩因子


%权值学习增量初始化

d_Wjk=zeros(n,M);
d_Wij=zeros(N,n);
d_a=zeros(1,n);
d_b=zeros(1,n);

%设置学习率

lr1 = 0.01;
lr2 = 0.001;
time = 1000; %最大迭代次数


%数据归一化

[inputn,inputps] = mapminmax(input'); %归一化的数据格式:M x N
[outputn,outputps] = mapminmax(output'); %归一化的数据格式:1 x N
inputn = inputn';
outputn = outputn';


%节点初始化

y=zeros(1,N);
net=zeros(1,n);
net_ab=zeros(1,n);


%网络训练

for i=1:time
    error(i) = 0; %保存训练误差
%循环训练
    for kk=1:size(input,1)
        x=inputn(kk,:);
        yqw=outputn(kk,:);

%网络预测输出

        for j=1:n
            for k=1:M
                net(j)=net(j)+Wjk(j,k)*x(k);
                net_ab(j)=(net(j)-b(j))/a(j);
            end
            temp=mymorlet(net_ab(j)); %小波函数
            for k=1:N
               y=y+Wij(k,j)*temp;
            end
        end

          %计算误差和

          error(i)=error(i)+sum(abs(yqw-y));

          %权值调整

          for j=1:n

              %计算d_Wij(隐含层-输出层权值修正)

              temp=mymorlet(net_ab(j));
              for k=1:N
                 d_Wij(k,j)=d_Wij(k,j)-(yqw(k)-y(k))*temp;
              end

              %计算d_Wjk(输入层-隐含层权值修正)

              temp=d_mymorlet(net_ab(j));
              for k=1:M
                  for l=1:N
                      d_Wjk(j,k)=d_Wjk(j,k)+(yqw(l)-y(l))*Wij(l,j) ;
                  end
                  d_Wjk(j,k)=-d_Wjk(j,k)*temp*x(k)/a(j);
              end

              %计算d_b(输出层阈值修正)

              for k=1:N
                  d_b(j)=d_b(j)+(yqw(k)-y(k))*Wij(k,j);
              end
              d_b(j)=d_b(j)*temp/a(j);

              %计算d_a(隐含层阈值修正)

              for k=1:N
                  d_a(j)=d_a(j)+(yqw(k)-y(k))*Wij(k,j);
              end
              d_a(j)=d_a(j)*temp*((net(j)-b(j))/b(j))/a(j);
          end

          %权值参数更新

          Wij=Wij-lr1*d_Wij;
          Wjk=Wjk-lr1*d_Wjk;
          b=b-lr2*d_b;
          a=a-lr2*d_a;

          d_Wjk=zeros(n,M);
          d_Wij=zeros(N,n);
          d_a=zeros(1,n);
          d_b=zeros(1,n);
   
          y=zeros(1,N);
          net=zeros(1,n);
          net_ab=zeros(1,n);

          Wjk_1=Wjk;Wjk_2=Wjk_1;
          Wij_1=Wij;Wij_2=Wij_1;
          a_1=a;a_2=a_1;
          b_1=b;b_2=b_1;
    end
end

%网络预测

test = mapminmax('apply',input_test',inputps);
test = test';

%误差可视化
for i=1:size(test,1)
    vec = test(i,:);
    for j=1:n
        for k=1:M
            net(j) = net(j)+Wjk(j,k)*vec(k);
            net_ab(j)=(net(j)-b(j))/a(j);
        end
        temp = mymorlet(net_ab(j));
        for k=1:N
            y(k)=y(k)+Wij(k,j)*temp ;
        end
    end
    yuce(i) = y(k);
    y = zeros(1,N);
    net = zeros(1,n);
    net_ab = zeros(1,n);
end
ynn = mapminmax('reverse',yuce,outputps); %网络预测值
error_test = abs(ynn' - output_test);
error = mapminmax('reverse',error,outputps)/sum(output);
figure(1)
plot(1:time,error);
title('训练过程中的误差')
figure(2)
plot(ynn,'--')
hold on
plot(output_test,'r')
plot(error_test,'g')
legend('predict','original','error')
figure(3)
plot(error_test)
legend('error_test')
回复此楼 已获打赏: 0 积分

举报

新手

5 麦片

财富积分


050


2

主题

8

帖子

0

最佳答案
发表于 5 天前 | 显示全部楼层
陈闪闪123 发表于 2019-4-8 17:51
这是程序!!!!谢谢!!!
clear;
clc;

同学,请问你的问题解决了吗
回复此楼 已获打赏: 0 积分

举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

快速回复 返回顶部 返回列表