From 7aa57191da9231916cf77d4bbd8f8e0d76f66a8a Mon Sep 17 00:00:00 2001 From: Kristin Date: Sun, 23 Nov 2025 17:16:18 +0100 Subject: [PATCH] neuralNetworkTests mit Kommentaren --- matrix.c | 32 ++------------------------------ neuralNetworkTests.c | 38 ++++++++++++++++++++++++++++++-------- 2 files changed, 32 insertions(+), 38 deletions(-) diff --git a/matrix.c b/matrix.c index 64d551c..4a2ec16 100644 --- a/matrix.c +++ b/matrix.c @@ -89,30 +89,6 @@ Matrix broadCastRows(const Matrix matrix, const unsigned int rows, } Matrix add(const Matrix matrix1, const Matrix matrix2) { - Matrix result; - const int cols1 = matrix1.cols; - const int rows1 = matrix1.rows; - const int cols2 = matrix2.cols; - const int rows2 = matrix2.rows; - const int colsEqu = (matrix1.cols == matrix2.cols) ? 1 : 0; - const int rowsEqu = (matrix1.rows == matrix2.rows) ? 1 : 0; - if(colsEqu && rowsEqu) - { - Matrix result = createMatrix(matrix1.rows, matrix1.cols); - for(int i = 0; i < rows1; i++) - { - for (int j = 0; j < cols1; j++) - { - int valueM1 = getMatrixAt(matrix1, i, j); - int valueM2 =getMatrixAt(matrix2, i, j); - int sum = valueM1 + valueM2; - setMatrixAt(sum, result,i,j); - } - } - -<<<<<<< HEAD - // Broadcasting nur bei Vektor und Matrix, Fehlermeldung bei zwei unpassenden - // Matrizen const unsigned int rows1 = matrix1.rows; const unsigned int rows2 = matrix2.rows; @@ -233,15 +209,11 @@ Matrix add(const Matrix matrix1, const Matrix matrix2) { } else { - printf( - "Fehlermeldung"); // vielleicht Fehlermeldung ändern zu Programmabbruch + printf("Fehlermeldung"); // vielleicht Fehlermeldung ändern zu + // Programmabbruch Matrix error = {0, 0, NULL}; return error; } -======= - return result; - } ->>>>>>> 7f3c6d1d3f7d4ee08747df6a4999e1908f5dd56d } Matrix multiply(const Matrix matrix1, const Matrix matrix2) { diff --git a/neuralNetworkTests.c b/neuralNetworkTests.c index 9d2ac42..8b6c307 100644 --- a/neuralNetworkTests.c +++ b/neuralNetworkTests.c @@ -5,28 +5,50 @@ #include #include +/*typedef struct +{ + Matrix weights; + Matrix biases; + ActivationFunctionType activation; +} Layer; + +typedef struct +{ + Layer *layers; + unsigned int numberOfLayers; +} NeuralNetwork;*/ + +/*Layer: Ebene im neuronalen Netzwerk, besteht aus mehreren Neuronen +Input-Layer: Eingabedatei +Hidden-Layer: verarbeiten die Daten +Output-Layer: Ergebnis + + +Gewichte: bestimmen, wie stark ein Eingangssignal auf ein Neuron wirkt + +Dimension: Form der Matrizen für einen Layer*/ + +// speichert NeuralNetwork nn in binäre Datei->erzeugt Dateiformat static void prepareNeuralNetworkFile(const char *path, const NeuralNetwork nn) { - FILE *f = fopen(path, "wb"); + FILE *f = fopen(path, "wb"); // Binärdatei zum Schreiben öffnen if (f == NULL) return; - /* 1) Header: exakt das String, ohne '\n' oder abschließendes '\0' */ + // Header ist Erkennungsstring am Anfang der Datei, loadmodel erkennt + // Dateiformat const char header[] = "__info2_neural_network_file_format__"; fwrite(header, sizeof(char), strlen(header), f); - /* Wenn es keine Layer gibt, kein Dimensionspaar schreiben (loadModel - wird beim Lesen dann 0 zurückgeben). Aber wir können auch frühzeitig - mit einem 0-Int terminieren — beides ist in Ordnung. */ + // Wenn es keine Layer gibt, 0 eintragen, LoadModel gibt 0 zurück if (nn.numberOfLayers == 0) { - /* optional: schreibe ein 0 als next outputDimension (nicht nötig) */ int zero = 0; fwrite(&zero, sizeof(int), 1, f); fclose(f); return; } - /* 2) Für die erste Layer schreiben wir inputDimension und outputDimension */ - /* inputDimension == weights.cols, outputDimension == weights.rows */ + // Layer 0, inputDimension: Anzahl Input-Neuronen, outputDimension: Anzahl + // Output-Neuronen int inputDim = (int)nn.layers[0].weights.cols; int outputDim = (int)nn.layers[0].weights.rows; fwrite(&inputDim, sizeof(int), 1, f);