《工程机械智能化技术》BP神经网络

结果如下:

在这里插入图片描述

运行次数设定为40000次,在26886次收敛。结果达到预期效果!

第一步 新建一个脚本(sigmod.m)

function [ y ] = sigmod( x )
% 激励函数Sigmod,用于神经网络
y = 1/(1+exp(-x));
end

第二步 在新建一个脚本

clc,clear
%samples
trainNumber=15;
testNumber=3;
trainData = [1.78,1.96,1.86,1.72,2.00,2.00,1.96,1.74,1.64,1.82,1.90,1.70,1.82,1.82,2.08;
             1.14,1.18,1.20,1.24,1.26,1.28,1.30,1.36,1.38,1.38,1.38,1.40,1.48,1.54,1.56;
             0.9,0.9,0.9,0.1,0.9,0.9,0.9,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1];%训练样本;
testData = [1.78,1.72,2;1.14,1.24,1.26;0.9,0.1,0.9];%测试数据;

hideSize=10;%隐含层神经元数目
outSize=1;%输出层神经元数目
inSize=2;%输入层神经元数目
Learning = 0.01;%学习率
W1=rand(hideSize,inSize);%输入层到隐含层之间的权重
W2=rand(outSize,hideSize);%隐含层到输出层之间的权重
B1=rand(hideSize,1);%隐含层神经元的阈值
B2=rand(outSize,1);%输出层神经元的阈值
Y = trainData(3,:);%期望输出
Falses=40000;%训练次数
E=zeros(1,Falses);
for False=1:Falses
for sample=1:trainNumber
    x =trainData(1:2,sample);
	hide_in=W1*x+B1;%影藏层输入值
    hide_out = zeros(hideSize,1);%隐含层输出值
	for j=1:hideSize
		hide_out(j)=sigmod(hide_in(j));
	end

	y_in=W2*hide_out+B2;%输入层输入值
    y_out = zeros(outSize,1);%输出层输出值
	for j=1:outSize
		y_out(j)=sigmod(y_in(j));
	end

	e=y_out-Y(:,sample);%输出层计算结果误差
    E(False) = e(1);
    
  %后向反馈   

  %隐含层与输出层之间的权重的变化量  
  dW2=zeros(outSize,hideSize);
	for j=1:outSize%输出层
		for k=1:hideSize%隐藏层
			dW2(j,k)=Learning*e(j)*hide_out(k)*sigmod(y_in(j))*(1-sigmod(y_in(j)));%%隐藏层到输出层权值变化量
		end
    end
    %隐含层阈值变化量    
    dB2 = zeros(outSize,1);%误差对输出层阈值求偏导,计算阈值变化量
    for j=1:outSize
		dB2(j)=Learning*e(j)*1*sigmod(y_in(j))*(1-sigmod(y_in(j)));
    end
     %输入层到隐含层的权重变化量
    dW1 = zeros(hideSize,inSize);
	  for j=1:hideSize     
         for k=1:inSize
             Sum = 0;
                for m=1:outSize
				Sum=Sum+e(m)*Learning*x(k)*sigmod(y_in(m))*(1-sigmod(y_in(m)))*sigmod(hide_in(j))*(1-sigmod(hide_in(j)))*W2(m,j);
                end
            dW1(j,k) = Sum;
		end
      end
      %隐含层阈值变化量
        dB1 = zeros(hideSize,1);
        for j = 1:hideSize
            Sum2 = 0;
            for k = 1:outSize
                Sum2 = Sum2 + sigmod(y_in(k))*(1-sigmod(y_in(k)))*W2(k,j)*sigmod(hide_in(j))*(1-sigmod(hide_in(j)))*e(k)*Learning;
            end
            dB1(j) = Sum2;
        end
	W1=W1-dW1;
	W2=W2-dW2;

	B1=B1-dB1;
	B2=B2-dB2;
end

    if mod(False,100)==0
        False
    end
    if(E(False)<0.001)
        False
        break;
    end
end

%检验数据结果
inspect_out = zeros(outSize,testNumber);
for i = 1:testNumber
    x = testData(1:2,i);
    
    hide_in = W1*x+B1;%隐含层输入值
    hide_out = zeros(hideSize,1);%隐含层输出值
    for j = 1:hideSize
        hide_out(j) = sigmod(hide_in(j));
    end
    
    Y_in = W2*hide_out+B2;%输出层输入值
    Y_out = zeros(outSize,1);
    for j = 1:outSize
        Y_out(j) = sigmod(Y_in(j));
    end
    inspect_out(:,i) = Y_out
end
原创文章 1 获赞 4 访问量 139

猜你喜欢

转载自blog.csdn.net/outsider2019/article/details/106103122