Merge branch 'main' of https://git.efi.th-nuernberg.de/gitea/ehrnspergersi95041/NeuronalesNetzwerk
This commit is contained in:
commit
e1e15deaf2
Binary file not shown.
@ -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);
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include "matrix.h"
|
||||
#include "unity.h"
|
||||
#include "./unity/unity.h"
|
||||
|
||||
|
||||
void test_createMatrixFailsOnZeroDimensions(void)
|
||||
|
||||
@ -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