Compare commits

..

3 Commits

View File

@ -2,13 +2,71 @@
#include <stdlib.h>
#include <string.h>
#include <math.h>
#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)