Как исправить ошибку, чтобы я мог получить результат в Matlab? - PullRequest
0 голосов
/ 06 марта 2020

Я новичок в Matlab для проблемы нейронной сети. Позвольте мне описать то, с чем я сталкиваюсь, когда я использую matlab для нейронной сети.

Я моделирую набор данных для нейронной сети. Я обозначаю Y как переменную ответа, а X1, X2 и X3 являются предикторами. Предположим, есть 1000 наблюдений. Следовательно, я получаю вектор Y с размером 1000 X 1, X=[X1,X2,X3], который имеет размерность 1000 X 3 такой, что каждый X1, X2 и X3 имеет размерность 1000 X 1. Они Согласно официальной документации, https://www.mathworks.com/help/deeplearning/ref/trainnetwork.html#mw_0847a076 -b088-4378-b870-5c00a7f92e18

Я использую net = trainNetwork(sequences,Y,layers,options) для обучения сети LSTM. Сначала я передаю данные следующим образом:

time_step=201; % Set the time_step to be 201
time_step_lower=200; time_step_upper=400;
num_sequence=5;
sequence_X=cell(num_sequence,1); sequence_Y=cell(num_sequence,1);
for i=1:num_sequence
if i~=num_sequence
    sequence_X_append=X((i-1)*time_step+1:i*time_step,:)';
    sequence_Y_append=Y((i-1)*time_step+1:i*time_step,:)';

else
    sequence_X_append=X((i-1)*time_step+1:end,:)';
    sequence_Y_append=Y((i-1)*time_step+1:end,:)';
    sequence_length=length(sequence_X_append);
    if sequence_length<time_step_lower || sequence_length>time_step_upper
        sequence_X_append=X(end-time_step+1:end,:)';
        sequence_Y_append=Y(end-time_step+1:end,:)';

    end

end
sequence_X{i}=sequence_X_append;
sequence_Y{i}=sequence_Y_append;
end

Я также вставляю следующие слои для нейронной сети:

% Definition of layers
% number of predictor variables
numFeatures=3;
% Assuming the number of hidden units
numHiddenUnits=64;
numResponses = 10;
layers = [ ...
sequenceInputLayer(numFeatures)
lstmLayer(numHiddenUnits)
fullyConnectedLayer(numResponses)
regressionLayer];
maxEpochs=100;
options = trainingOptions('adam', ...
'ExecutionEnvironment','cpu', ...
'MaxEpochs',maxEpochs, ...
'GradientThreshold',1, ...
'Verbose',false, ...
'Plots','training-progress');

Наконец, я использую net = trainNetwork(sequence_X,sequence_Y,layers,options); для обучения, но вывод сообщений об ошибках:

Ошибка при использовании trainNetwork (строка 170) Неверные данные обучения. Ответы должны быть матрицей чисел c ответов или массивом последовательностей ячеек N-1, где N - количество последовательностей. Измерение характеристик всех последовательностей должно быть одинаковым.

Я предполагаю, что в моем коде что-то не так, и я хотел бы обратиться за помощью здесь. Спасибо.

...