Я получаю сообщение об ошибке при обучении простой нейронной сети в MATLAB - PullRequest
0 голосов
/ 17 октября 2019

Я построил простую нейронную сеть в MATLAB, как показано в коде ниже, а входные и выходные данные имеют размеры 128x1, я разделил входные данные как 21x1 для проверки и 107 для обучения:

clear all; clc; clear;  

bits = randi([0 1], 1 , 128);                 %Original generated data 
data_temp = bi2de(reshape(bits,128/2,2));   
data_mod = (1/sqrt(2))*qammod(data_temp , 4);  

inputs = [real(data_mod); imag(data_mod)];      %the input data of input layer (128 x 1); 
outputs = bits.';                               %output data from output layer (128 x 1); 

inputs_len = 128;                    %length of input data 
outputs_len = 128;                   %length of output data 

IN_V1 = inputs(end-20:end);                     %Test validation input vector
OUT_V1 = outputs(end-20:end);                   %Test Validation output Vector 

Train_seq_in = inputs(22 : end);               %Training inpur Data
Train_seq_out = outputs(22:end);               %Training output Data 

%build Neural network
options1 = trainingOptions('adam','MaxEpochs',2000,'InitialLearnRate',0.001,'MiniBatchSize',10,'Shuffle','every','L2Regularization',0,'Plots','training-progress','ValidationData',{IN_V1,OUT_V1})
layers =[sequenceInputLayer(107) fullyConnectedLayer(1024) reluLayer() fullyConnectedLayer(outputs_len) regressionLayer];

%train network 
 Net1 = trainNetwork(Train_seq_in,Train_seq_out,layers,options1);                  %Training the Network real

Когда я запускаю приведенный выше код, я получаю сообщение об ошибке:

Error using trainNetwork (line 165)
The validation sequences are of feature dimension 21 but the input layer expects sequences of feature
dimension 107.

Error in quetion (line 24)
 Net1 = trainNetwork(Train_seq_in,Train_seq_out,layers,options1);                  %Training the Network
 real

Однако я думаю, что это не логично, потому что данные проверки должны быть меньше данных тестирования !!

Я пытался изменить данные проверки на те же входные данные, как показано ниже:

%build Neural network
options1 = trainingOptions('adam','MaxEpochs',2000,'InitialLearnRate',0.001,'MiniBatchSize',10,'Shuffle','every','L2Regularization',0,'Plots','training-progress','ValidationData',{IN_V1,OUT_V1})
layers =[sequenceInputLayer(21) fullyConnectedLayer(1024) reluLayer() fullyConnectedLayer(outputs_len) regressionLayer];

%train network 
 Net1 = trainNetwork(IN_V1,IN_V1,layers,options1);                  %Training the Network real

, но в этом случае я получаю еще одну странную ошибку, как показано ниже:

Error using trainNetwork (line 165)
To RESHAPE the number of elements must not change.

Error in quetion (line 24)
 Net1 = trainNetwork(IN_V1,IN_V1,layers,options1);                  %Training the Network real

Caused by:
    Error using reshape
    To RESHAPE the number of elements must not change.

Пожалуйста, кто-нибудь может помочь мне в решении этой проблемы?

Спасибо

1 Ответ

1 голос
/ 18 октября 2019

Для второй ошибки: Ошибка при использовании trainNetwork (строка 165). Для ПЕРЕПОЛНЕНИЯ число элементов не должно изменяться.

Error in quetion (line 24)
 Net1 = trainNetwork(IN_V1,IN_V1,layers,options1);                  %Training the Network real

Caused by:
    Error using reshape
    To RESHAPE the number of elements must not change. 

При изменении размера входного слоя вы также должны изменить размервыходной слой, поэтому вы должны заменить эту строку:

layers =[sequenceInputLayer(21) fullyConnectedLayer(1024) reluLayer() fullyConnectedLayer(outputs_len) regressionLayer];

этой строкой:

layers =[sequenceInputLayer(21) fullyConnectedLayer(1024) reluLayer() fullyConnectedLayer(21) regressionLayer];
...