用于级联反向传播网络的多个训练数据

时间:2017-05-25 18:14:13

标签: matlab neural-network

我正在使用连续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天的目标?由于培训和测试输入必须具有相同的尺寸,我如何仅测试一天?这里只需连接测试输入的三个相同数据集即可解决。然而,这也为预测目标产生3个不同的数据集。

这是正确的方法吗?

BTW:我已多次看到这类问题,但答案永远不会令人满意,因为他们总是建议改变测试输入的维度而不考虑问题的性质(只有一个数据集可用)用于检测)。所以请不要将其标记为副本。

1 个答案:

答案 0 :(得分:1)

您的网络功能包括TemperatureSolarRadiation,每个功能都是在白天的特定时间拍摄的。获取这些读数的日期无关紧要(否则您将无法预测第1-3天给出的第1-3天的数据)。

这意味着我们可以通过连接日期水平(以及类似的目标数据)来分别传递每个观察结果:

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

生成的网络将在测试集中为每个观察提供一个输出(Current),因此您无需复制:

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

PredictedTarget现在将为1乘5​​显示每个测试观察结果的预测Current

您可以考虑添加第三个功能作为您网络的输入,表示每次观察的时间。假设您每天都有t个时间点进行观察(因此,所有日期都为length(Temperature) == length(SolarRadiation) == t),并且每天在同一时间进行观察s,您可以添加一个功能叫TimeSlot

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