preparation data for Convolutional Neural Network in regression approach

21 次查看(过去 30 天)
dear my friends Thanks for your guidance.
I've another question. after that, I was disappointed with LSTM Regression Layer in Matlab, i tried to use a Normal CNN for my Time series prediction. in my codes initially, i changed the dimensional of data from [1*1000] to [3*997] (with consideration time delays).
because it should be similar to an image input then changed this 2-dimensional matrix to 4-dimensional matrices, to be a proper Input data for CNN layer. and after that trained a CNN network and then finally check the prediction results with the real targets, the strange point is prediction scales is much less than the real targets, I don't have any idea Why this happened?
Many Thanks Abolfazl Nejatian
Here is my code
function RegressionCNN()
clc; clear; close all;
%%load data
X = xlsread('forexTest.xlsx');
NumDelay = 4;
Delays = setDelays(NumDelay);
[Inputs, Targets] = CreateTimeSeriesData(X', Delays);
Inputs = Inputs';
Targets = Targets';
nData = size(Inputs,1);
PERM = 1:nData; % Permutation to Shuffle Data
pTrain = .8;
nTrainData = round(pTrain*nData);
TrainInd = PERM(1:nTrainData);
TrainInputs = Inputs(TrainInd,:);
TrainTargets = Targets(TrainInd,:);
pTest = 1-pTrain;
nTestData = nData-nTrainData;
TestInd = PERM(nTrainData+1:end);
TestInputs = Inputs(TestInd,:);
TestTargets = Targets(TestInd,:);
%%Creat LSTM Layers
layers = [ ...
imageInputLayer([size(Inputs,2) 1],'Name','rinput');
convolution2dLayer(1,25);
reluLayer();
fullyConnectedLayer(1);
regressionLayer('Name','routput')];
%%Train LSTM network
maxEpochs = 200;
shuffle = 'never';
miniBatchSize = 10;
options = trainingOptions('sgdm', ...
'MaxEpochs',maxEpochs, ...
'Shuffle', shuffle,...
'MiniBatchSize',miniBatchSize,...
'Verbose',1,...
'Plots','training-progress',...
'SequenceLength','longest',...
'ExecutionEnvironment','cpu');
Y = TrainTargets;
X = TrainInputs';
X = build4DData(X);
net = trainNetwork(X,Y,layers,options);
%%Test Network
XTest = TestInputs';
TestTargets = TestTargets;
XTest = build4DData(XTest);
YPred = predict(net,XTest, ...
'MiniBatchSize',miniBatchSize,...
'ExecutionEnvironment','cpu');
%%plot the results
close all
format long
YPred = double(YPred);
whos('TestTargets')
whos('YPred')
Errors = TestTargets - YPred;
MSE = mean(Errors.^2);
RMSE = sqrt(MSE);
ErrorMean = mean(Errors);
ErrorStd = std(Errors);
subplot(2,2,[1 2]);
plot(TestTargets);
hold on;
plot(YPred);
legend('Targets','Outputs');
ylabel('Targets and Outputs');
grid on;
subplot(2,2,3);
plot(Errors);
title(['MSE = ' num2str(MSE) ', RMSE = ' num2str(RMSE)]);
ylabel('Errors');
grid on;
subplot(2,2,4);
histfit(Errors, 50);
title(['Error Mean = ' num2str(ErrorMean) ', Error StD = ' num2str(ErrorStd)]);
function XNew = build4DData(x)
XNew = zeros(size(x,1),1,1,size(x,2));
XNew(:,1,1,:) = x(:,:);
  1 个评论
John Albert
John Albert 2018-1-2
Dear Abolfazl Nejatian, Did you find any solution to this problem. I have a problem similar to yours. It will be very helpful to me as well. Thanks.

请先登录,再进行评论。

回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Sequence and Numeric Feature Data Workflows 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by