2017-05-25 7 views
0

私は3日間連続してデータを使用して神経ネットワークをトレーニングし、4日目のデータでテストします。この例の値はランダムに選択され、現実とは関係がありません。私は温度と太陽放射に応じて、ニューラルネットワークに電流を知りたい。カスケードフォワードバックプロパゲーションネットワーク用の複数のトレーニングデータ

%% initialize data for training 
Temperature_Day1 = [25 26 27 26 25]; 
Temperature_Day2 = [25 24 24 23 24]; 
Temperature_Day3 = [21 20 22 21 20]; 
SolarRadiation_Day1 = [990 944 970 999 962]; 
SolarRadiation_Day2 = [993 947 973 996 967]; 
SolarRadiation_Day3 = [993 948 973 998 965]; 
Current_Day1 = [0.11 0.44 0.44 0.45 0.56]; 
Current_Day2 = [0.41 0.34 0.43 0.55 0.75]; 
Current_Day3 = [0.34 0.98 0.34 0.76 0.71]; 
Day1 = [Temperature_Day1; SolarRadiation_Day1]; % 2-by-5 
Day2 = [Temperature_Day2; SolarRadiation_Day2]; % 2-by-5 
Day3 = [Temperature_Day3; SolarRadiation_Day3]; % 2-by-5 

%% training input and training target 
Training_Input = [Day1; Day2; Day3]; % 6-by-5 
Training_Target = [Current_Day1; Current_Day2; Current_Day3]; % 3-by-5 

%% training the network 
hiddenLayers= 2; 
net = newcf(Training_Input, Training_Target, hiddenLayers); 
y = sim(net, Training_Input); 
net.trainParam.epochs = 100; 
net = train(net, Training_Input, Training_Target); 

%% initialize data for prediction 
Temperature_Day4 = [45 23 22 11 24]; 
SolarRadiation_Day4 = [960 984 980 993 967]; 
Current_Day4 = [0.14 0.48 0.37 0.46 0.77]; 
Day4 = [Temperature_Day4; SolarRadiation_Day4]; % 2-by-5 
Test_Input = [Day4; Day4; Day4]; % same dimension as Training_Input; subject to question 

%% prediction 
Predicted_Target = sim(net, Test_Input); % yields 3-by-5 

私の質問は:どのように私は3日間のデータでそれを訓練してから4日目の目標を予測していますか?トレーニングとテストの入力は同じ次元でなければならないので、どのようにして1日だけテストするのですか?ここでは、テスト入力の3つの同じデータセットを連結するだけで解決します。しかし、これはまた、予測されたターゲットに対して3つの異なるデータセットをもたらす。

ここには正しい方法がありますか?

私はこのタイプの質問を何度も見てきましたが、問題の性質を考慮せずにテスト入力の寸法を変更することを常に提案しているため、答えは決して満足できません。テスト用に利用可能)。だから、これを重複としてマークしないでください。

+0

私は仮定温度、日射量、および電流に関するデータは、あらかじめ定義された時間間隔で取得され、読み値の時間をフィーチャとして正確に保持したいと考えていますか? – beaker

+0

はい、そうです。私のオリジナルのコードでは、毎日サンプルがはるかに多いですが、簡単にするためにサンプルを減らしています。 –

答えて

1

ネットワークの機能は、TemperatureSolarRadiationで、それぞれ特定の時刻に取得されています。これらの測定値が取られる日は無関係です(そうでなければ、1日目〜3日目のデータを4日目に予測することはできません)。

これは、我々は単に(対象データについても同様)水平日を連結することによって、個別の観測を渡すことができることを意味する:

Training_Input = [Day1, Day2, Day3]; % 2-by-15 
Training_Target = [Current_Day1, Current_Day2, Current_Day3]; % 1-by-15 

得ネットワークが観測ごとあなた(Current)を1つの出力を与えますテストセットで、あなたが複製する必要はありませんので:

Day4 = [Temperature_Day4; SolarRadiation_Day4]; % 2-by-5 
Test_Input = [Day4]; % 2-by-5 

PredictedTargetは今予測を1行5表示されますそれぞれのテスト観測のための210。


第3のフィーチャを、各観測値が取得された時間を表すネットに入力として追加することを検討することもできます。あなたは観測が(、したがって、すべての日のためのlength(Temperature) == length(SolarRadiation) == t)を採取し、観察sは、毎日同じ時刻に取得され、あなたがTimeSlotと呼ばれる機能を追加することができたでtタイムスロット毎日を持っていると仮定すると:

TimeSlot_Day1 = 1:numel(Temperature_Day1); 
TimeSlot_Day2 = 1:numel(Temperature_Day2); 
TimeSlot_Day3 = 1:numel(Temperature_Day3)]; 
Day1 = [Temperature_Day1; SolarRadiation_Day1; TimeSlot_Day1]; % 3-by-5 
Day2 = [Temperature_Day2; SolarRadiation_Day2; TimeSlot_Day2]; % 3-by-5 
Day3 = [Temperature_Day3; SolarRadiation_Day3; TimeSlot_Day3]; % 3-by-5 
関連する問題