diff --git a/neuralNetworkTests.c b/neuralNetworkTests.c index fce7b48..83742e1 100644 --- a/neuralNetworkTests.c +++ b/neuralNetworkTests.c @@ -4,11 +4,55 @@ #include #include "unity.h" #include "neuralNetwork.h" +#define IDENT_TAG "__info2_neural_network_file_format__" +static void writeWeights(Layer layer, FILE *file) +{ + fwrite(&layer.weights.rows, sizeof(unsigned int), 1, file); + fwrite(&layer.weights.cols, sizeof(unsigned int), 1, file); + fwrite(layer.weights.buffer, sizeof(float ), layer.weights.rows * layer.weights.cols, file); +} + +static void writeBiases(Layer layer, FILE *file) +{ + fwrite(&layer.biases.rows, sizeof(unsigned int), 1, file); + fwrite(&layer.biases.cols, sizeof(unsigned int), 1, file); + fwrite(layer.biases.buffer, sizeof(float ), layer.biases.rows * layer.biases.cols, file); +} + static void prepareNeuralNetworkFile(const char *path, const NeuralNetwork nn) { -//TODO +//file erstellen und zum binärschreiben öffnen + FILE *file = fopen(path, "wb"); + if(!file) + return; + + //header reinschreiben + const char *header = IDENT_TAG; + fwrite(header, sizeof(char), strlen(header), file); + + //einfachheitshalber ein layer erstellen + + fwrite(&nn.numberOfLayers, sizeof(unsigned int), 1, file); + for (unsigned int i = 0; i < nn.numberOfLayers; i++) + { + Layer layer = nn.layers[i]; + + //activationType initialisieren (formt ergebnis der matritzenmultiplikation um, damit es in einem neuronalen Netzwerk sinnvoll weiterverwendet werden kann.) + unsigned int activationType = 1; //Aktivirungstyp id (zb 1 für ReLU) + fwrite(&activationType, sizeof(unsigned int), 1, file); + + //dimensionen festlegen(weights) + writeWeights(layer, file); + + + //dimension festlegen(bias) + writeBiases(layer, file); + + + } + fclose(file); } void test_loadModelReturnsCorrectNumberOfLayers(void)