Многослойные персептроны в EmguCVC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Многослойные персептроны в EmguCV

Сообщение Anonymous »

Я пытаюсь реализовать многослойные нейронные сети персептронов (MLP) с использованием EMGUCV 3.1 (точечная обертка для библиотеки OpenCV) в C#(форма Windows). Чтобы практиковаться с этой библиотекой, я решаю реализовать или операцию с использованием MLP. < /p>

Я создаю MLP, используя метод «Инициализировать» и изучать его, используя метод «поезда», как ниже: < /p>

Код: Выделить всё

private void Initialize()
{
NETWORK.SetActivationFunction(
ANN_MLP.AnnMlpActivationFunction.SigmoidSym);

NETWORK.SetTrainMethod(ANN_MLP.AnnMlpTrainMethod.Backprop);

Matrix layers = new Matrix(new Size(4, 1));
layers[0, 0] = 2;
layers[0, 1] = 2;
layers[0, 2] = 2;
layers[0, 3] = 1;
NETWORK.SetLayerSizes(layers);
}

private void Train()
{
// providing data for input

Matrix input = new Matrix(4, 2);
input[0, 0] = MIN_ACTIVATION_FUNCTION; input[0, 1] = MIN_ACTIVATION_FUNCTION;
input[1, 0] = MIN_ACTIVATION_FUNCTION; input[1, 1] = MAX_ACTIVATION_FUNCTION;
input[2, 0] = MAX_ACTIVATION_FUNCTION; input[2, 1] = MIN_ACTIVATION_FUNCTION;
input[3, 0] = MAX_ACTIVATION_FUNCTION; input[3, 1] = MAX_ACTIVATION_FUNCTION;

//providing data for output
Matrix output = new Matrix(4, 1);
output[0, 0] = MIN_ACTIVATION_FUNCTION;
output[1, 0] = MAX_ACTIVATION_FUNCTION;
output[2, 0] = MAX_ACTIVATION_FUNCTION;
output[3, 0] = MAX_ACTIVATION_FUNCTION;

// mixing input and output for training
TrainData mixedData = new TrainData(
input,
Emgu.CV.ML.MlEnum.DataLayoutType.RowSample,
output);

// stop condition = 1 million iterations
NETWORK.TermCriteria = new MCvTermCriteria(1000000);

// training
NETWORK.Train(mixedData);
}
где min_activation_function и max_activation_function равны -1,7159 и 1.7159 соответственно (в соответствии с документацией OpenCV). После 1000000 итераций (как вы видите в моем коде в условиях остановки) я проверяю свою сеть на предсказание, используя метод прогноза, как ниже: < /p>

Код: Выделить всё

private void Predict()
{
Matrix input = new Matrix(1, 2);
input[0, 0] = MIN_ACTIVATION_FUNCTION;
input[0, 1] = MIN_ACTIVATION_FUNCTION;

Matrix output = new Matrix(1, 1);

NETWORK.Predict(input, output);
MessageBox.Show(output[0, 0].ToString());

//////////////////////////////////////////////

input[0, 0] = MIN_ACTIVATION_FUNCTION;
input[0, 1] = MAX_ACTIVATION_FUNCTION;

NETWORK.Predict(input, output);
MessageBox.Show(output[0, 0].ToString());

//////////////////////////////////////////////

input[0, 0] = MAX_ACTIVATION_FUNCTION;
input[0, 1] = MIN_ACTIVATION_FUNCTION;

NETWORK.Predict(input, output);
MessageBox.Show(output[0, 0].ToString());

////////////////////////////////////////////////

input[0, 0] = MAX_ACTIVATION_FUNCTION;
input[0, 1] = MAX_ACTIVATION_FUNCTION;

NETWORK.Predict(input, output);
MessageBox.Show(output[0, 0].ToString());
}
< /code>

Вот образец того, что предсказывает сеть:

-0.00734469

-0.03184918

0.02080269

-0.006674092,020269

-0.006674092, />  Я ожидаю, что будет что-то вроде следующего:

-1.7

+1.7

+1.7

+1.7

Что не так среди моих кодов? Min_activation_function < /code> и max_activation_function < /code> Значения, но я все еще не получаю хороших результатов. < /P>

Обновление 1:
Я редактирую свои коды как первый ответ Me Refers Me (даже я тестирую свой код с идеей, ссылаемся в комментариях). Теперь я получаю NAN 
, когда вызов прогнозирует Метод.

Подробнее здесь: https://stackoverflow.com/questions/433 ... -in-emgucv
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»