matlab实现BP神经网络调试不成功

问题遇到的现象和发生背景

希望能够用五个参数预测一个输出值,得到权值矩阵。
五个变量,输出一个预测值
网络结构:单隐含层神经网络,五个输入节点,7个隐含层节点,1个输出层节点
传递函数:tanhx

问题相关代码,请勿粘贴截图
clear all
clc
%% 读取数据并划分数据集


data = [1.5000    0.1000    0.0500    6.2832    0.2000    0.7839
    1.5000    0.1000    0.0500    6.2832    0.3000    0.7677
    1.5000    0.1000    0.0500    6.2832    0.4000    0.7541
    1.5000    0.1000    0.0500    6.2832    0.5000    0.7378
    1.5000    0.1000    0.0500   11.9119    0.2000    0.7683
    1.5000    0.1000    0.0500   11.9119    0.3000    0.7452
    1.5000    0.1000    0.0500   11.9119    0.4000    0.7223
    1.5000    0.1000    0.0500   11.9119    0.5000    0.6993
    1.5000    0.1000    0.0500   17.8024    0.2000    0.7544
    1.5000    0.1000    0.0500   17.8024    0.3000    0.7223
    1.5000    0.1000    0.0500   17.8024    0.4000    0.6948
    1.5000    0.1000    0.0500   17.8024    0.5000    0.6668
    1.5000    0.1000    0.1000    6.2832    0.2000    0.7543
    1.5000    0.1000    0.1000    6.2832    0.3000    0.7410
    1.5000    0.1000    0.1000    6.2832    0.4000    0.7265
    1.5000    0.1000    0.1000    6.2832    0.5000    0.7118
    1.5000    0.1000    0.1000   11.9119    0.2000    0.7433
    1.5000    0.1000    0.1000   11.9119    0.3000    0.7246
    1.5000    0.1000    0.1000   11.9119    0.4000    0.7042
    1.5000    0.1000    0.1000   11.9119    0.5000    0.6825
    1.5000    0.1000    0.1000   17.8024    0.2000    0.7256
    1.5000    0.1000    0.1000   17.8024    0.3000    0.6980
    1.5000    0.1000    0.1000   17.8024    0.4000    0.6704
    1.5000    0.1000    0.1000   17.8024    0.5000    0.6435
    1.5000    0.1000    0.1500    6.2832    0.2000    0.7240
    1.5000    0.1000    0.1500    6.2832    0.3000    0.7115
    1.5000    0.1000    0.1500    6.2832    0.4000    0.6976
    1.5000    0.1000    0.1500    6.2832    0.5000    0.6828
    1.5000    0.1000    0.1500   11.9119    0.2000    0.7136
    1.5000    0.1000    0.1500   11.9119    0.3000    0.6965
    1.5000    0.1000    0.1500   11.9119    0.4000    0.6790
    1.5000    0.1000    0.1500   11.9119    0.5000    0.6615
    1.5000    0.1000    0.1500   17.8024    0.2000    0.6957
    1.5000    0.1000    0.1500   17.8024    0.3000    0.6696
    1.5000    0.1000    0.1500   17.8024    0.4000    0.6435
    1.5000    0.1000    0.1500   17.8024    0.5000    0.6178
    1.5000    0.2000    0.0500    6.2832    0.2000    0.7180
    1.5000    0.2000    0.0500    6.2832    0.3000    0.7055
    1.5000    0.2000    0.0500    6.2832    0.4000    0.6915
    1.5000    0.2000    0.0500    6.2832    0.5000    0.6770
    1.5000    0.2000    0.0500   11.9119    0.2000    0.7085
    1.5000    0.2000    0.0500   11.9119    0.3000    0.6909
    1.5000    0.2000    0.0500   11.9119    0.4000    0.6727
    1.5000    0.2000    0.0500   11.9119    0.5000    0.6548
    1.5000    0.2000    0.0500   17.8024    0.2000    0.6905
    1.5000    0.2000    0.0500   17.8024    0.3000    0.6647
    1.5000    0.2000    0.0500   17.8024    0.4000    0.6385
    1.5000    0.2000    0.0500   17.8024    0.5000    0.6127
    1.5000    0.2000    0.1000    6.2832    0.2000    0.6877
    1.5000    0.2000    0.1000    6.2832    0.3000    0.6760
    1.5000    0.2000    0.1000    6.2832    0.4000    0.6628
    1.5000    0.2000    0.1000    6.2832    0.5000    0.6481
    1.5000    0.2000    0.1000   11.9119    0.2000    0.6768
    1.5000    0.2000    0.1000   11.9119    0.3000    0.6596
    1.5000    0.2000    0.1000   11.9119    0.4000    0.6436
    1.5000    0.2000    0.1000   11.9119    0.5000    0.6270
    1.5000    0.2000    0.1000   17.8024    0.2000    0.6633
    1.5000    0.2000    0.1000   17.8024    0.3000    0.6388
    1.5000    0.2000    0.1000   17.8024    0.4000    0.6141
    1.5000    0.2000    0.1000   17.8024    0.5000    0.5893
    1.5000    0.2000    0.1500    6.2832    0.2000    0.6548
    1.5000    0.2000    0.1500    6.2832    0.3000    0.6448
    1.5000    0.2000    0.1500    6.2832    0.4000    0.6326
    1.5000    0.2000    0.1500    6.2832    0.5000    0.6188
    1.5000    0.2000    0.1500   11.9119    0.2000    0.6434
    1.5000    0.2000    0.1500   11.9119    0.3000    0.6275
    1.5000    0.2000    0.1500   11.9119    0.4000    0.6116
    1.5000    0.2000    0.1500   11.9119    0.5000    0.5954
    1.5000    0.2000    0.1500   17.8024    0.2000    0.6343
    1.5000    0.2000    0.1500   17.8024    0.3000    0.6135
    1.5000    0.2000    0.1500   17.8024    0.4000    0.5914
    1.5000    0.2000    0.1500   17.8024    0.5000    0.5682
    1.5000    0.3000    0.0500    6.2832    0.2000    0.6488
    1.5000    0.3000    0.0500    6.2832    0.3000    0.6388
    1.5000    0.3000    0.0500    6.2832    0.4000    0.6268
    1.5000    0.3000    0.0500    6.2832    0.5000    0.6133
    1.5000    0.3000    0.0500   11.9119    0.2000    0.6367
    1.5000    0.3000    0.0500   11.9119    0.3000    0.6212
    1.5000    0.3000    0.0500   11.9119    0.4000    0.6054
    1.5000    0.3000    0.0500   11.9119    0.5000    0.5894
    1.5000    0.3000    0.0500   17.8024    0.2000    0.6281
    1.5000    0.3000    0.0500   17.8024    0.3000    0.6072
    1.5000    0.3000    0.0500   17.8024    0.4000    0.5847
    1.5000    0.3000    0.0500   17.8024    0.5000    0.5615
    1.5000    0.3000    0.1000    6.2832    0.2000    0.6139
    1.5000    0.3000    0.1000    6.2832    0.3000    0.6055
    1.5000    0.3000    0.1000    6.2832    0.4000    0.5956
    1.5000    0.3000    0.1000    6.2832    0.5000    0.5841
    1.5000    0.3000    0.1000   11.9119    0.2000    0.6042
    1.5000    0.3000    0.1000   11.9119    0.3000    0.5906
    1.5000    0.3000    0.1000   11.9119    0.4000    0.5755
    1.5000    0.3000    0.1000   11.9119    0.5000    0.5600
    1.5000    0.3000    0.1000   17.8024    0.2000    0.5939
    1.5000    0.3000    0.1000   17.8024    0.3000    0.5752
    1.5000    0.3000    0.1000   17.8024    0.4000    0.5565
    1.5000    0.3000    0.1000   17.8024    0.5000    0.5376
    1.5000    0.3000    0.1500    6.2832    0.2000    0.5747
    1.5000    0.3000    0.1500    6.2832    0.3000    0.5675
    1.5000    0.3000    0.1500    6.2832    0.4000    0.5593
    1.5000    0.3000    0.1500    6.2832    0.5000    0.5501
    1.5000    0.3000    0.1500   11.9119    0.2000    0.5693
    1.5000    0.3000    0.1500   11.9119    0.3000    0.5587
    1.5000    0.3000    0.1500   11.9119    0.4000    0.5465
    1.5000    0.3000    0.1500   11.9119    0.5000    0.5330
    1.5000    0.3000    0.1500   17.8024    0.2000    0.5555
    1.5000    0.3000    0.1500   17.8024    0.3000    0.5381
    1.5000    0.3000    0.1500   17.8024    0.4000    0.5202
    1.5000    0.3000    0.1500   17.8024    0.5000    0.5022
    2.0000    0.1000    0.0500    6.2832    0.2000    0.6650
    2.0000    0.1000    0.0500    6.2832    0.3000    0.6527
    2.0000    0.1000    0.0500    6.2832    0.4000    0.6385
    2.0000    0.1000    0.0500    6.2832    0.5000    0.6256
    2.0000    0.1000    0.0500   11.9119    0.2000    0.6518
    2.0000    0.1000    0.0500   11.9119    0.3000    0.6328
    2.0000    0.1000    0.0500   11.9119    0.4000    0.6139
    2.0000    0.1000    0.0500   11.9119    0.5000    0.5957
    2.0000    0.1000    0.0500   17.8024    0.2000    0.6331
    2.0000    0.1000    0.0500   17.8024    0.3000    0.6097
    2.0000    0.1000    0.0500   17.8024    0.4000    0.5837
    2.0000    0.1000    0.0500   17.8024    0.5000    0.5583
    2.0000    0.1000    0.1000    6.2832    0.2000    0.6522
    2.0000    0.1000    0.1000    6.2832    0.3000    0.6373
    2.0000    0.1000    0.1000    6.2832    0.4000    0.6272
    2.0000    0.1000    0.1000    6.2832    0.5000    0.6139
    2.0000    0.1000    0.1000   11.9119    0.2000    0.6407
    2.0000    0.1000    0.1000   11.9119    0.3000    0.6227
    2.0000    0.1000    0.1000   11.9119    0.4000    0.6052
    2.0000    0.1000    0.1000   11.9119    0.5000    0.5877
    2.0000    0.1000    0.1000   17.8024    0.2000    0.6242
    2.0000    0.1000    0.1000   17.8024    0.3000    0.5987
    2.0000    0.1000    0.1000   17.8024    0.4000    0.5736
    2.0000    0.1000    0.1000   17.8024    0.5000    0.5496
    2.0000    0.1000    0.1500    6.2832    0.2000    0.6345
    2.0000    0.1000    0.1500    6.2832    0.3000    0.6182
    2.0000    0.1000    0.1500    6.2832    0.4000    0.6067
    2.0000    0.1000    0.1500    6.2832    0.5000    0.5963
    2.0000    0.1000    0.1500   11.9119    0.2000    0.6242
    2.0000    0.1000    0.1500   11.9119    0.3000    0.6077
    2.0000    0.1000    0.1500   11.9119    0.4000    0.5933
    2.0000    0.1000    0.1500   11.9119    0.5000    0.5772
    2.0000    0.1000    0.1500   17.8024    0.2000    0.6051
    2.0000    0.1000    0.1500   17.8024    0.3000    0.5836
    2.0000    0.1000    0.1500   17.8024    0.4000    0.5594
    2.0000    0.1000    0.1500   17.8024    0.5000    0.5361
    2.0000    0.2000    0.0500    6.2832    0.2000    0.6278
    2.0000    0.2000    0.0500    6.2832    0.3000    0.6177
    2.0000    0.2000    0.0500    6.2832    0.4000    0.6047
    2.0000    0.2000    0.0500    6.2832    0.5000    0.5916
    2.0000    0.2000    0.0500   11.9119    0.2000    0.6179
    2.0000    0.2000    0.0500   11.9119    0.3000    0.6019
    2.0000    0.2000    0.0500   11.9119    0.4000    0.5858
    2.0000    0.2000    0.0500   11.9119    0.5000    0.5682
    2.0000    0.2000    0.0500   17.8024    0.2000    0.6018
    2.0000    0.2000    0.0500   17.8024    0.3000    0.5775
    2.0000    0.2000    0.0500   17.8024    0.4000    0.5535
    2.0000    0.2000    0.0500   17.8024    0.5000    0.5306
    2.0000    0.2000    0.1000    6.2832    0.2000    0.6115
    2.0000    0.2000    0.1000    6.2832    0.3000    0.6003
    2.0000    0.2000    0.1000    6.2832    0.4000    0.5883
    2.0000    0.2000    0.1000    6.2832    0.5000    0.5753
    2.0000    0.2000    0.1000   11.9119    0.2000    0.5949
    2.0000    0.2000    0.1000   11.9119    0.3000    0.5851
    2.0000    0.2000    0.1000   11.9119    0.4000    0.5697
    2.0000    0.2000    0.1000   11.9119    0.5000    0.5547
    2.0000    0.2000    0.1000   17.8024    0.2000    0.5873
    2.0000    0.2000    0.1000   17.8024    0.3000    0.5598
    2.0000    0.2000    0.1000   17.8024    0.4000    0.5384
    2.0000    0.2000    0.1000   17.8024    0.5000    0.5177
    2.0000    0.2000    0.1500    6.2832    0.2000    0.5911
    2.0000    0.2000    0.1500    6.2832    0.3000    0.5791
    2.0000    0.2000    0.1500    6.2832    0.4000    0.5685
    2.0000    0.2000    0.1500    6.2832    0.5000    0.5557
    2.0000    0.2000    0.1500   11.9119    0.2000    0.5761
    2.0000    0.2000    0.1500   11.9119    0.3000    0.5644
    2.0000    0.2000    0.1500   11.9119    0.4000    0.5466
    2.0000    0.2000    0.1500   11.9119    0.5000    0.5349
    2.0000    0.2000    0.1500   17.8024    0.2000    0.5686
    2.0000    0.2000    0.1500   17.8024    0.3000    0.5492
    2.0000    0.2000    0.1500   17.8024    0.4000    0.5275
    2.0000    0.2000    0.1500   17.8024    0.5000    0.5037
    2.0000    0.3000    0.0500    6.2832    0.2000    0.5835
    2.0000    0.3000    0.0500    6.2832    0.3000    0.5726
    2.0000    0.3000    0.0500    6.2832    0.4000    0.5601
    2.0000    0.3000    0.0500    6.2832    0.5000    0.5491
    2.0000    0.3000    0.0500   11.9119    0.2000    0.5676
    2.0000    0.3000    0.0500   11.9119    0.3000    0.5537
    2.0000    0.3000    0.0500   11.9119    0.4000    0.5393
    2.0000    0.3000    0.0500   11.9119    0.5000    0.5252
    2.0000    0.3000    0.0500   17.8024    0.2000    0.5626
    2.0000    0.3000    0.0500   17.8024    0.3000    0.5374
    2.0000    0.3000    0.0500   17.8024    0.4000    0.5200
    2.0000    0.3000    0.0500   17.8024    0.5000    0.4958
    2.0000    0.3000    0.1000    6.2832    0.2000    0.5566
    2.0000    0.3000    0.1000    6.2832    0.3000    0.5496
    2.0000    0.3000    0.1000    6.2832    0.4000    0.5413
    2.0000    0.3000    0.1000    6.2832    0.5000    0.5311
    2.0000    0.3000    0.1000   11.9119    0.2000    0.5462
    2.0000    0.3000    0.1000   11.9119    0.3000    0.5340
    2.0000    0.3000    0.1000   11.9119    0.4000    0.5199
    2.0000    0.3000    0.1000   11.9119    0.5000    0.5080
    2.0000    0.3000    0.1000   17.8024    0.2000    0.5382
    2.0000    0.3000    0.1000   17.8024    0.3000    0.5197
    2.0000    0.3000    0.1000   17.8024    0.4000    0.5014
    2.0000    0.3000    0.1000   17.8024    0.5000    0.4835
    2.0000    0.3000    0.1500    6.2832    0.2000    0.5295
    2.0000    0.3000    0.1500    6.2832    0.3000    0.5226
    2.0000    0.3000    0.1500    6.2832    0.4000    0.5144
    2.0000    0.3000    0.1500    6.2832    0.5000    0.5057
    2.0000    0.3000    0.1500   11.9119    0.2000    0.5249
    2.0000    0.3000    0.1500   11.9119    0.3000    0.5146
    2.0000    0.3000    0.1500   11.9119    0.4000    0.5028
    2.0000    0.3000    0.1500   11.9119    0.5000    0.4898
    2.0000    0.3000    0.1500   17.8024    0.2000    0.5094
    2.0000    0.3000    0.1500   17.8024    0.3000    0.4918
    2.0000    0.3000    0.1500   17.8024    0.4000    0.4736
    2.0000    0.3000    0.1500   17.8024    0.5000    0.4561];
num_train = 150;
num_test = 30 ;
r = randperm(length(data));  
set_train = data(r(1:num_train) , 1:5 ); 
set_result = data(r(1:num_train) , 6 )' ;  
set_test = data(r(num_train+1 : num_train + num_test ), 1:5 );
set_test_result = data(r(num_train+1 : num_train + num_test ), 6 )';  
%% 处理数据 正则化
for i = 1:5 
    normalization_train(:,i) = 0.8*(set_train(:,i)-min(set_train(:,i) ))/(max(set_train(:,i))-min(set_train(:,i))) +0.1;
    normalization_test(:,i) = 0.8*(set_test(:,i)-min(set_test(:,i)))/(max(set_test(:,i))-min(set_test(:,i))) +0.1;
end
%% 创建网络
net.nIn = 5 ; 
N=7 ;  
net.nHidden = N; 
net.nOut = 1 ; 

w1 = 2*(rand(net.nHidden,net.nIn)-0.5);
b1 = 2*(rand(net.nHidden,   1)  -0.5);  
net.w1 = [w1,b1];  

w2 = 2*(rand(net.nOut,net.nHidden)-0.5);  
b2 = 2*(rand(net.nOut,    1)   -0.5);   
net.w2 = [w2,b2];  
%% 输入数据训练
learning_rate = 0.2; %学习率
num_interation = 2000; % 迭代次数
interation = 0 ;%记录迭代次数
mc = 0.1      ; % 动量因子
eb = 0.01;
err_Save=[];

input = [normalization_train'; ones(1,num_train)];
for i = 1:num_interation
    %信息正向传播
    hidden_input =  net.w1 * input;
    hidde_output = tanh(hidden_input); 

    out_input1 = [hidde_output ; ones(1,num_train)] ;  
    out_input = net.w2 * out_input1;
    out_out = tanh(out_input);

    %处理误差
    err = set_result - out_out ;
    sse = sumsqr(err);  
    err_Save(i) = sse ;
    fprintf('第%d次迭代误差为: %d \n',i,sse);
    interation = interation+1;
    if sse<=eb
        break;
    end 

    %误差反向传播
    delta_2 = err.*(1-out_out.^2);
    delta_1 =(net.w2(:,1:end-1)'* delta_2).* (1-tanh(hidden_input).^2);

    dw_2 = delta_2 * out_input1';
    dw_1 = delta_1 * input' ;

    net.w2= net.w2 +learning_rate*dw_2;
    net.w1=net.w1 + learning_rate*dw_1;
 
end
%% 测试

test_in = [normalization_test' ; ones(1,num_test)];
test_hidden_input =  net.w1* test_in;  
test_hidde_output = tanh(test_hidden_input); 
test_out_input1 = [test_hidde_output ;ones(1,num_test)] ; 
test_out_input = net.w2 * test_out_input1;
test_out_out = tanh(test_out_input); 


err_test=(set_test_result-test_out_out)./set_test_result;% 计算误差
%绘制测试集的误差
correct_rate = 0;
for i = 1: num_test
    if err_test(i)<=0.01
        correct_rate= correct_rate+1;
    end
end
fprintf('此次测试的正确率为: %d %% \n', correct_rate);
%% 绘图
% 绘制误差变化图
plot(err_Save);

运行结果及报错内容

img

误差平方和几步迭代以后就不再变化

我的解答思路和尝试过的方法

尝试换传递函数,结果相同

我想要达到的结果

你运行的没有结果对吗