diff --git a/NeuronalesNetz_Aufgabenstellung.pdf b/NeuronalesNetz_Aufgabenstellung.pdf index 59af82f..b4c6ce5 100644 Binary files a/NeuronalesNetz_Aufgabenstellung.pdf and b/NeuronalesNetz_Aufgabenstellung.pdf differ diff --git a/Start_Windows/imageInputTests.c b/Start_Windows/imageInputTests.c index c704271..ba2f850 100644 --- a/Start_Windows/imageInputTests.c +++ b/Start_Windows/imageInputTests.c @@ -2,7 +2,7 @@ #include #include #include -#include "unity.h" +#include "./unity/unity.h" #include "imageInput.h" @@ -54,7 +54,7 @@ void test_readImagesReturnsCorrectImageWidth(void) GrayScaleImageSeries *series = NULL; const unsigned short expectedWidth = 10; const char *path = "testFile.info2"; - prepareImageFile(path, 8, expectedWidth, 2, 1); + prepareImageFile(path, expectedWidth, 8, 2, 1); series = readImages(path); TEST_ASSERT_NOT_NULL(series); TEST_ASSERT_NOT_NULL(series->images); @@ -70,7 +70,7 @@ void test_readImagesReturnsCorrectImageHeight(void) GrayScaleImageSeries *series = NULL; const unsigned short expectedHeight = 10; const char *path = "testFile.info2"; - prepareImageFile(path, expectedHeight, 8, 2, 1); + prepareImageFile(path, 8, expectedHeight, 2, 1); series = readImages(path); TEST_ASSERT_NOT_NULL(series); TEST_ASSERT_NOT_NULL(series->images); diff --git a/Start_Windows/matrixTests.c b/Start_Windows/matrixTests.c index 33fd1c3..8276575 100644 --- a/Start_Windows/matrixTests.c +++ b/Start_Windows/matrixTests.c @@ -2,7 +2,7 @@ #include #include #include "matrix.h" -#include "unity.h" +#include "./unity/unity.h" void test_createMatrixFailsOnZeroDimensions(void) 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)