Mehrschicht-Perzeptrons in EMGUCVC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Mehrschicht-Perzeptrons in EMGUCV

Post by Anonymous »

Ich versuche, neuronale Netzwerke (Multi-Layer Perceptrons) mithilfe von EMGUCV 3.1 (einem DOT-Net-Wrapper für die OpenCV-Bibliothek) in C#(Windows-Formular) implementieren. Um mit dieser Bibliothek zu üben, beschließe ich, mit MLP zu implementieren oder zu operieren. < /p>

Ich erstelle MLP mit "Initialize" -Methode und lerne sie mit der "Zug" -Methode wie unten: < /p>

Code: Select all

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);
}
wobei min_activation_function und max_activation_function gleich -1.7159 bzw. 1.7159 sind (gemäß OpenCV -Dokumentation). Nach 1000000 Iterationen von (wie Sie in meinem Code in Stoppbedingung sehen) teste ich mein Netzwerk auf die Vorhersage mithilfe der Vorhersagemethode wie unten: < /p>

Code: Select all

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>

Hier ist ein Beispiel dessen, was das Netzwerk vorhersagt:

-0.00734469

-0.03184918

0.02080269

Ich erwarte so etwas wie folgt:

-1.7

+1.7

+1.7

1.7

Was ist falsch unter meinen Codes? Min_activation_function < /code> und max_activation_function < /code> Werte, aber ich mache immer noch keine guten Ergebnisse. Jetzt erhalte ich Nan 
, wenn Anruf Methode vorhersagt.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post
  • Zeigen Sie ein EmguCV-Bild im Windows Form Picture Box an
    by Guest » » in C#
    0 Replies
    11 Views
    Last post by Guest
  • EMGUCV MAT -Objekt ist immer null in .net maui android
    by Anonymous » » in C#
    0 Replies
    7 Views
    Last post by Anonymous