《工程机械智能化技术》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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孤鸟的歌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值