Alexander Schneider 2025-11-16 17:20:21 +01:00
commit e1e15deaf2
4 changed files with 64 additions and 6 deletions

Binary file not shown.

View File

@ -2,7 +2,7 @@
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#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);

View File

@ -2,7 +2,7 @@
#include <stdio.h>
#include <stdlib.h>
#include "matrix.h"
#include "unity.h"
#include "./unity/unity.h"
void test_createMatrixFailsOnZeroDimensions(void)

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)