資源簡介
基于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?????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?
評論
共有 條評論