From 880514b55f5835f0ac0a9b547e00b7995097fbb1 Mon Sep 17 00:00:00 2001 From: D2A62006 Date: Thu, 27 Nov 2025 11:54:47 +0100 Subject: [PATCH] implement prepareNeuralNetworkFile() --- neuralNetwork.c | 2 +- neuralNetwork.sh | 1 + neuralNetworkTests.c | 36 ++++++++++++++++++++++++++++++++++-- 3 files changed, 36 insertions(+), 3 deletions(-) create mode 100644 neuralNetwork.sh diff --git a/neuralNetwork.c b/neuralNetwork.c index bd8f164..36fca85 100644 --- a/neuralNetwork.c +++ b/neuralNetwork.c @@ -164,7 +164,7 @@ NeuralNetwork loadModel(const char *path) assignActivations(model); } - + printf("%d\n", model.numberOfLayers); return model; } diff --git a/neuralNetwork.sh b/neuralNetwork.sh new file mode 100644 index 0000000..7e56cdd --- /dev/null +++ b/neuralNetwork.sh @@ -0,0 +1 @@ +make clean && make && make neuralNetworkTests diff --git a/neuralNetworkTests.c b/neuralNetworkTests.c index 21ab370..1a993db 100644 --- a/neuralNetworkTests.c +++ b/neuralNetworkTests.c @@ -8,9 +8,41 @@ static void prepareNeuralNetworkFile(const char *path, const NeuralNetwork nn) { - // TODO -} + FILE *file = fopen(path, "wb"); + if(file != NULL){ + const char *fileTag = "__info2_neural_network_file_format__"; + + // Write file header + fwrite(fileTag, sizeof(char), strlen(fileTag), file); + + // Write the input dimension of the first layer + if(nn.numberOfLayers > 0){ + fwrite(&nn.layers[0].weights.cols, sizeof(int), 1, file); + } + + // Write dimensions and data for each layer + for(int i = 0; i < nn.numberOfLayers; i++){ + + // Write output dimension (rows of weights) + fwrite(&nn.layers[i].weights.rows, sizeof(int), 1, file); + + // Write weight matrix data + int weightSize = nn.layers[i].weights.rows * nn.layers[i].weights.cols; + fwrite(nn.layers[i].weights.buffer, sizeof(MatrixType), weightSize, file); + + // Write bias matrix data + int biasSize = nn.layers[i].biases.rows * nn.layers[i].biases.cols; + fwrite(nn.layers[i].biases.buffer, sizeof(MatrixType), biasSize, file); + } + + // Write terminating 0 to signal end of layers + int zero = 0; + fwrite(&zero, sizeof(int), 1, file); + + fclose(file); + } +} void test_loadModelReturnsCorrectNumberOfLayers(void) { const char *path = "some__nn_test_file.info2";