• 大小: 3KB
    文件类型: .m
    金币: 2
    下载: 0 次
    发布日期: 2024-01-28
  • 语言: Matlab
  • 标签:

资源简介

基于MATLAB的BP神经网络来逼近双变量非线性函数,最后的逼近误差小于0.05

资源截图

代码片段和文件信息

%使用BP神经网络来对函数:y = sin(x1)+cos(x2)进行逼近

clc; %清屏  
close all; %关闭已打开的所有视图窗口
clear all; %清除工作空间中的所有变量

l = 0.1;
Input1 = -2 : l : 2; 
Input2 = -2 : l : 2; %网络的训练样本

[feature1  sample1] = size(Input1); %得到网络的输入特征数以及训练网络所用的样本数
[feature2  sample2] = size(Input2);
input = feature1 + feature2; %输入层的节点数(即输入的特征个数)
sample = sample1 * sample2; %训练样本数
middle = 19; %隐含层的节点数=19,这一层的激励函数选用Sigmoid函数
output = 1; %输出层的节点数=1,这一层的激励函数选用线性函数

%初始化隐含层及输出层对应的权重和阈值矩阵
weight2 = rand(output  middle) - 2 * rand(output  middle); %初始化输出层对应的权重矩阵
weight1 = rand(middle  input) - 2 * rand(middle  input); %初始化隐含层对应的权重矩阵
thre2 = rand(output  1) - 2 * rand(output  1); %初始化输出层对应的阈值矩阵
thre1 = rand(middle  1) - 2 * rand(middle  1); %初始化隐含层对应的阈值矩阵

RunCnt = 0; %运行次数
e1 = 0; %逼近误差
MaxError = 0.05; %网络可容忍的逼近误差的最大值
assistS1 = zeros(middle  middle); %存储变量以辅助计算s1
assistS2 = zeros(output  output); %存储变量以辅助计算s2
alpha = 0.1; %网络的学习率

%程序的主循环
while(RunCnt < 10000 && e1 < MaxError)
    e1 = 0; %每一次样本循环开始时,将样本的逼近误差置为零
    for i = 1 : sample1 %根据每一个训练样本对网络进行更新
        for j = 1 : sample2
        netMiddle = weight1 * [Input1(:  i) ; Input2(:  j)] + thre1; %计算隐含层的输出
        netMiddle = 1 ./ (1 + exp(-netMiddle)); %经过激励函数之后的隐含层的输出,隐含层的激励函数为logistic函数
        netOutput = weight2 * netMiddle + thre2; %计算网络前向传播中输出层的值
        
        assistS1 = diag((1 - netMiddle) .* netMiddle);
        assistS2 

评论

共有 条评论