Update MM

This commit is contained in:
muellermo100295 2025-11-26 17:59:49 +01:00
parent d79454d9ed
commit 7e5dcc8574
3 changed files with 36 additions and 5 deletions

View File

@ -41,7 +41,7 @@ Matrix createMatrix(unsigned int rows, unsigned int cols)
// Erstellt eine neue Matrix mit gegebener Zeilen- und Spaltenanzahl
Matrix createMatrix(unsigned int rows, unsigned int cols)
{
Matrix matrix = {0, 0, NULL}; // Initialisierung mit leeren Werten
Matrix matrix = {NULL,0, 0}; // Initialisierung mit leeren Werten
if (rows == 0 || cols == 0) return matrix; // Ungültige Dimensionen → leere Matrix zurückgeben
matrix.rows = rows;
@ -85,7 +85,7 @@ MatrixType getMatrixAt(const Matrix matrix, unsigned int rowIdx, unsigned int co
// Addiert zwei Matrizen miteinander (entweder elementweise oder mit Broadcasting)
Matrix add(const Matrix matrix1, const Matrix matrix2)
{
Matrix result = {0, 0, NULL};
Matrix result = {NULL,0, 0};
// Elementweise Addition: gleiche Dimensionen
if (matrix1.rows == matrix2.rows && matrix1.cols == matrix2.cols) {
@ -120,7 +120,7 @@ Matrix add(const Matrix matrix1, const Matrix matrix2)
// Multipliziert zwei Matrizen miteinander (Matrixmultiplikation)
Matrix multiply(const Matrix matrix1, const Matrix matrix2)
{
Matrix result = {0, 0, NULL};
Matrix result = {NULL,0, 0};
if (matrix1.cols != matrix2.rows) return result; // Dimensionen müssen passen: A.cols == B.rows

View File

@ -8,9 +8,9 @@ typedef float MatrixType;
// TODO Matrixtyp definieren
// *****************************************************
typedef struct {
MatrixType *buffer;
unsigned int rows;
unsigned int cols;
MatrixType *buffer;
} Matrix;
// *****************************************************

View File

@ -8,7 +8,38 @@
static void prepareNeuralNetworkFile(const char *path, const NeuralNetwork nn)
{
// TODO
FILE *file = fopen(path, "wb");
if (!file) {
fprintf(stderr, "Fehler: Datei konnte nicht geöffnet werden.\n");
return;
}
// Header schreiben
const char *header = "__info2_neural_network_file_format__";
fwrite(header, sizeof(char), strlen(header), file);
// Erste Dimension: Input der ersten Schicht
unsigned int inputDim = nn.layers[0].weights.cols;
fwrite(&inputDim, sizeof(unsigned int), 1, file);
// Für jede Schicht
for (int i = 0; i < nn.numberOfLayers; i++) {
Layer layer = nn.layers[i];
// Output-Dimension
unsigned int outputDim = layer.weights.rows;
fwrite(&outputDim, sizeof(unsigned int), 1, file);
// Weights
fwrite(layer.weights.buffer, sizeof(MatrixType),
layer.weights.rows * layer.weights.cols, file);
// Biases
fwrite(layer.biases.buffer, sizeof(MatrixType),
layer.biases.rows * layer.biases.cols, file);
}
fclose(file);
}
void test_loadModelReturnsCorrectNumberOfLayers(void)