資源簡介
對循環神經網絡的簡單認識及一些主要數學過程的推導的文檔和應用matlab代碼編寫一個簡單的循環神經網絡進行預測的一個matlab程序。

代碼片段和文件信息
%%%使用BPTT算法完成Elman網絡的訓練
%%?程序說明
%??1、數據為7天,四個時間點的空調功耗,用前三個推測第四個訓練,依次類推。第七天作為檢驗
%??2、Elman網絡輸入結點為12,輸出結點為4個,隱藏結點18個
clear?all;
clc;
%%?加載數據并進行歸一化處理
[train_datatest_data]=Elman_data_process();
data_length=size(train_data1);????????????%每個樣本的長度
data_num=size(train_data2);???????????????%樣本數目?
%%?網絡參數初始化
%結點數目設置
input_layer_num=data_length;
hidden_layer_num=18;
output_layer_num=size(test_data1);
%權重初始化
weight_input_hidden=rand(hidden_layer_numinput_layer_num)/1000;
weight_prehidden_hidden=rand(hidden_layer_numhidden_layer_num)/1000;
weight_hidden_output=rand(output_layer_numhidden_layer_num)/1000;
output_state=zeros(output_layer_num3);
%%?網絡訓練學習部分??采用BPTT算法
yita=0.001;??????????????%每次迭代的步進
for?num=1:4000
for?t=1:3???????%%時間步,使用三推一
????%從輸入到隱層
????if?(t==1)
????????pre_hidden_state=weight_input_hidden*train_data(:t);
????else
???????pre_hidden_state=weight_input_hidden*train_data(:t)+weight_prehidden_hidden*hidden_state(:t-1);
????end
????%從隱層到輸出
????for?n=1:hidden_layer_num
????????hidden_state(nt)=1/(1+exp(-pre_hidden_state(n:)));??????????????%%通過sigmoid函數
????end
????output_state(:t)=weight_hidden_output*hidden_state(:t);
????%誤差計算
????Error=output_state(:t)-test_data(:t);
????Error_cost(1num)=sum((output_state(:t)-test_data(:t)).^2);
????if(Error_cost(1num)<1e-4)
????????break;
????end
????%權值更新
????[weight_input_hiddenweight_prehidden_hiddenweight_hidden_output]=updata_weight(tyitaErrortrain_datahidden_stateweight_input_hiddenweight_prehidden_hiddenweight_hidden_output);
end
????if(Error_cost(1num)<1e-4)
????????break;
????end
end
%%?繪制COST曲線
for?n=1:1:num
????text(nError_cost(1n)‘*‘);
????axis([0num01]);
????xlabel(‘迭代次數‘);
????ylabel(‘誤差‘);
end
%%?結果檢驗
%%由前1-3天=>第4天
pre_hidden_state=weight_input_hidden*train_data(:1);
for?n=1:hidden_layer_num
????hidden_state(n1)=1/(1+exp(-pre_hidden_state(n:)));??????????????%%通過sigmoid函數
end
output_state(:1)=weight_hidden_output*hidden_state(:1);
for?i=4:7
fprintf(‘第%d天前面3天推測第%d天的結果%d?\n‘iioutput_state(i-33));
fprintf(‘真實第%d天結果%d?\n‘itest_data(i-34));
end
%使用第七組檢驗
test_final=[0.4557?0.4790?0.7019?0.8211?0.4601?0.4811?0.7101?0.8298?0.4612?0.4845?0.7188?0.8312]‘;
test_final=test_final/sqrt(sum(test_final.^2));
test_output=test_data(:4);
pre_hidden_state=weight_input_hidden*test_final+weight_prehidden_hidden*hidden_state(:3);
for?n=1:hidden_layer_num
????hidden_state1(n1)=1/(1+exp(-pre_hidden_state(n:)));??????????????%%通過sigmoid函數
end
t_output=weight_hidden_output*hidden_state1(:1);
test_output;
%計算誤差度
wucha=sum(abs(test_output-t_output)./t_output)/4
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件?????1084464??2019-08-16?00:32??賈偉偉_RNN算法推導過程及代碼.pdf
?????文件????????2899??2019-08-15?17:21??運行代碼\Elman_BPTT.m
?????文件????????1304??2019-08-15?16:42??運行代碼\Elman_data_process.m
?????文件????????1324??2019-08-15?16:42??運行代碼\updata_weight.m
?????文件??????594299??2019-08-16?00:30??RNN算法推導過程及代碼.docx
評論
共有 條評論