neuralNetworkTests.c angepasst #1
@ -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)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user