diff --git a/Start_Windows/neuralNetworkTests.c b/Start_Windows/neuralNetworkTests.c index 21ab370..f2b6839 100644 --- a/Start_Windows/neuralNetworkTests.c +++ b/Start_Windows/neuralNetworkTests.c @@ -2,13 +2,71 @@ #include #include #include -#include "unity.h" +#include "./unity/unity.h" #include "neuralNetwork.h" + // TODO +// Das Neuronale Netz +// Inhalte: Strukturen, Dateien schreiben +// Ein neuronales besteht aus verschiedenen Schichten und ihren Parametern. +// Die Struktur NeuralNetwork und die Implementierung in der entsprechenden Quelltextdatei bildet dies ab. +// Für die passenden Unittests fehlt jedoch noch eine Methode, die eine gültige Testdatei erzeugt, +// mit der die Funktionalität getestet werden kann. +// Die Datei beginnt mit dem Identifikationstag __info2_neural_network_file_format__, +// gefolgt von den einzelnen Schichten. +// +// Aufgaben: +// 1) Implementieren Sie die Funktion prepareNeuralNetworkFile() in neuralNetworkTests.c. +// Praktikum Informatik 2 +// +// Wintersemester 2025 +// 2) Stellen Sie sicher, dass alle Unittests erfolgreich durchlaufen. +// make neuralNetworkTests && ./runNeuralNetworkTests static void prepareNeuralNetworkFile(const char *path, const NeuralNetwork nn) { - // TODO + // First Draft + + // 1. Datei im binären Schreibmodus öffnen + FILE *file = fopen(path, "wb"); + if (file == NULL) { + perror("Fehler beim Öffnen der Datei"); + return; + } + + // 2. Den Identifikations-Tag schreiben + const char *fileTag = "__info2_neural_network_file_format__"; + fwrite(fileTag, sizeof(char), strlen(fileTag), file); + + // 3. Die Anzahl der Schichten schreiben + fwrite(&nn.numberOfLayers, sizeof(int), 1, file); + + // 4. Schleife über alle Schichten, um deren Daten zu schreiben + for (int i = 0; i < nn.numberOfLayers; i++) { + Layer currentLayer = nn.layers[i]; + + // 4a. Daten der Gewichts-Matrix (weights) schreiben + Matrix weights = currentLayer.weights; + int weightElements = weights.rows * weights.cols; + + // Schreibe Dimensionen (Zeilen, Spalten) + fwrite(&weights.rows, sizeof(int), 1, file); + fwrite(&weights.cols, sizeof(int), 1, file); + // Schreibe den Daten-Buffer (die eigentlichen Zahlen) + fwrite(weights.buffer, sizeof(MatrixType), weightElements, file); + + // 4b. Daten der Bias-Matrix (biases) schreiben + Matrix biases = currentLayer.biases; + int biasElements = biases.rows * biases.cols; + + // Schreibe Dimensionen (Zeilen, Spalten) + fwrite(&biases.rows, sizeof(int), 1, file); + fwrite(&biases.cols, sizeof(int), 1, file); + // Schreibe den Daten-Buffer + fwrite(biases.buffer, sizeof(MatrixType), biasElements, file); + } + // 5. Datei schließen + fclose(file); } void test_loadModelReturnsCorrectNumberOfLayers(void)