Взвешивать выборки при обучении ANN

#matlab #neural-network #weighted

#matlab #нейронная сеть #взвешенный

Вопрос:

На самом деле я обучаю ANN в MATLAB для оптимизации pump. У меня есть 2000 выборок в качестве входных данных для проектирования насоса и в качестве выходных данных для эффективности. Я получил несколько хороших результатов, но теперь я хочу переобучить модель. Я хочу изменить вес для каждой выборки таким образом, чтобы выборки с лучшей эффективностью имели больший вес, чем с малой эффективностью.

Как я могу взвесить свои выборки по эффективности?

Вот фрагмент моего кода:

 Mdl_NN1 = fitnet([6 4],training);
Mdl_NN1.layers{2}.transferFcn = 'purelin';
Mdl_NN1.divideParam.trainRatio = 70/100;
Mdl_NN1.divideParam.valRatio = 15/100;
Mdl_NN1.divideParam.testRatio = 15/100;
Mdl_NN1.trainParam.showWindow  = true;
[Mdl_NN1,TR] = train(Mdl_NN1,XtrainSet',YtrainSet(:,2)')
  

Xtrainset Это конструкция насоса по 6 параметрам, а YtrainSet это просто эффективность.

Комментарии:

1. Почему вы сделали это редактирование? Заголовок должен быть, ну, в заголовке, нет необходимости повторять его в теле. Xtrainset является переменной и, следовательно, соответствует встроенному форматированию кода, как оно есть в настоящее время. Пожалуйста, не удаляйте соответствующее форматирование из ваших сообщений.

Ответ №1:

Все дело в контроле ваших данных (это относится, в частности, к NNS). Итак, если вы хотите взвесить определенные выборки больше, чем другие, продублируйте их для обучения и удалите другие, которые являются неправильными / false. Это лучше, чем возиться с весами или изменять части подготовки / тестирования / валидации.

Одно предупреждение: если вы дублируете данные, убедитесь, что они отображаются только в обучающем наборе. Вы получите ненадежную точность, если будете рассматривать одни и те же примеры для обучения и тестирования. Поэтому вам может потребоваться явно задать данные для обучения / тестирования / проверки. Посмотрите на разделение данных для оптимального обучения нейронной сети в документах.

 Mdl_NN1.divideFcn = 'divideind';
Mdl_NN1.divideParam.trainInd = % vector with indices
Mdl_NN1.divideParam.testInd = % vector with indices
Mdl_NN1.divideParam.valInd = % vector with indices
  

или может быть достаточным, чтобы установить, правильно ли упорядочены данные

 Mdl_NN1.divideFcn = 'divideblock';