-
大小: 3KB文件類型: .m金幣: 1下載: 0 次發(fā)布日期: 2024-01-28
- 語言: Matlab
- 標(biāo)簽:
資源簡介
基于MATLAB的BP神經(jīng)網(wǎng)絡(luò)來逼近雙變量非線性函數(shù),最后的逼近誤差小于0.05
代碼片段和文件信息
%使用BP神經(jīng)網(wǎng)絡(luò)來對函數(shù):y?=?sin(x1)+cos(x2)進(jìn)行逼近
clc;?%清屏??
close?all;?%關(guān)閉已打開的所有視圖窗口
clear?all;?%清除工作空間中的所有變量
l?=?0.1;
Input1?=?-2?:?l?:?2;?
Input2?=?-2?:?l?:?2;?%網(wǎng)絡(luò)的訓(xùn)練樣本
[feature1??sample1]?=?size(Input1);?%得到網(wǎng)絡(luò)的輸入特征數(shù)以及訓(xùn)練網(wǎng)絡(luò)所用的樣本數(shù)
[feature2??sample2]?=?size(Input2);
input?=?feature1?+?feature2;?%輸入層的節(jié)點數(shù)(即輸入的特征個數(shù))
sample?=?sample1?*?sample2;?%訓(xùn)練樣本數(shù)
middle?=?19;?%隱含層的節(jié)點數(shù)=19,這一層的激勵函數(shù)選用Sigmoid函數(shù)
output?=?1;?%輸出層的節(jié)點數(shù)=1,這一層的激勵函數(shù)選用線性函數(shù)
%初始化隱含層及輸出層對應(yīng)的權(quán)重和閾值矩陣
weight2?=?rand(output??middle)?-?2?*?rand(output??middle);?%初始化輸出層對應(yīng)的權(quán)重矩陣
weight1?=?rand(middle??input)?-?2?*?rand(middle??input);?%初始化隱含層對應(yīng)的權(quán)重矩陣
thre2?=?rand(output??1)?-?2?*?rand(output??1);?%初始化輸出層對應(yīng)的閾值矩陣
thre1?=?rand(middle??1)?-?2?*?rand(middle??1);?%初始化隱含層對應(yīng)的閾值矩陣
RunCnt?=?0;?%運行次數(shù)
e1?=?0;?%逼近誤差
MaxError?=?0.05;?%網(wǎng)絡(luò)可容忍的逼近誤差的最大值
assistS1?=?zeros(middle??middle);?%存儲變量以輔助計算s1
assistS2?=?zeros(output??output);?%存儲變量以輔助計算s2
alpha?=?0.1;?%網(wǎng)絡(luò)的學(xué)習(xí)率
%程序的主循環(huán)
while(RunCnt?10000?&&?e1?????e1?=?0;?%每一次樣本循環(huán)開始時,將樣本的逼近誤差置為零
????for?i?=?1?:?sample1?%根據(jù)每一個訓(xùn)練樣本對網(wǎng)絡(luò)進(jìn)行更新
????????for?j?=?1?:?sample2
????????netMiddle?=?weight1?*?[Input1(:??i)?;?Input2(:??j)]?+?thre1;?%計算隱含層的輸出
????????netMiddle?=?1?./?(1?+?exp(-netMiddle));?%經(jīng)過激勵函數(shù)之后的隱含層的輸出,隱含層的激勵函數(shù)為logistic函數(shù)
????????netOutput?=?weight2?*?netMiddle?+?thre2;?%計算網(wǎng)絡(luò)前向傳播中輸出層的值
????????
????????assistS1?=?diag((1?-?netMiddle)?.*?netMiddle);
????????assistS2?
評論
共有 條評論