Как я понимаю ваш проект, вы хотите обучить классификатор на наборе данных, содержащем 3 различных класса.
Как правило, вы хотите пометить ваши данные теми классами, которые вы хотите изучить в своей сети, чтобы после обучения угадать, насколько оно все еще отклоняется от решения, чтобы он мог оптимизировать свои веса для следующей итерации.
Вы также хотите разделить свой набор данных на обучающий набор, который будет использоваться для обучения, и 2 порции с различными данными, сеть еще не «знает» и предоставит хороший справочник.
Это два набора для проверки, который используется для дополнительной проверки во время обучения, и набор для проверки, который используется для проверки точности после обучения.
Можно поступить так:
накапливает обучающие данные в матрице 4D A
, где первые 2 измерения будут вашими значениями для x
и y
, а третье измерение будет индексом матрицы XY. Вы можете сделать это, используя A = horzconcat(x,y)
используйте 4-е измерение, чтобы пометить ваши данные в соответствии с вашим классом. В вашем случае напишите 1 в первых 150 элементах, 2 в следующих 68 и 3 в последних 55
перемешать ваш помеченный набор данных. Вы можете использовать randperm
для создания случайного индекса, а затем выполнить итерацию набора
разделите ваш набор данных на части для обучения, проверки и тестирования. (обычно 60%, 20%, 20% разумно)
разбить каждый из этих наборов на трехмерную матрицу X, содержащую ваши тренировочные данные и вектор Y, содержащий решение для каждой обучающей информации.
В опциях обучения укажите данные проверки вместе с частью проверки, например:
training_options = trainingOptions ...
('sgdm', ...
'Verbose', 1 ,...
'VerboseFrequency' , 20, ...
'MaxEpochs', 30, ...
'MiniBatchSize', 128, ...
'Shuffle', 'every-epoch', ...
**'ValidationData', {X_validate, categorical(Y_validate)},...**
'ValidationFrequency', 20, ...
'ValidationPatience', 5, ...
'InitialLearnRate', 0.001, ...
'L2Regularization', 0, ...
'Momentum', 0, ...
'ExecutionEnvironment', 'cpu', ...
'Plots','training-progress');
тренируйте объект нейронной сети Matlab с
[nn, nn_info] = trainNetwork(X_train, categorical(Y_train), ...
layers, training_options);
Восстановление точности обученной сети:
acurracy = sum(Y_test_predictions == categorical(Y_test) )/ ...
size(Y_test, 1)
Я применил этот метод для сверточной сети, которая работала просто отлично.
Надеюсь, это поможет,
всего наилучшего,
Simon