diff --git a/neuralNetworkTests.c b/neuralNetworkTests.c index 83742e1..9fab030 100644 --- a/neuralNetworkTests.c +++ b/neuralNetworkTests.c @@ -9,39 +9,45 @@ 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); + unsigned int n = (unsigned int)layer.weights.rows * layer.weights.cols; //col und row müssen nicht extra eingelesen werden, da loadModel die Dimensionen aus der Fkt loadModel() selbst liest + fwrite(layer.weights.buffer, sizeof(MatrixType), n, 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); + unsigned int n = (unsigned int)layer.weights.rows * layer.weights.cols; + fwrite(layer.biases.buffer, sizeof(float ), n, file); } static void prepareNeuralNetworkFile(const char *path, const NeuralNetwork nn) { //file erstellen und zum binärschreiben öffnen FILE *file = fopen(path, "wb"); - if(!file) + if(file == NULL) 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); + + //Schließen der Datei, falls kein Layer vorhanden + if (nn.numberOfLayers == 0 || nn.layers == NULL) + { + fclose(file); + return; + } + + //Erste Eingangsdimension: Spalten der ersten Gewichtsmatrix + unsigned int inputDim = (unsigned int)nn.layers[0].weights.cols; + fwrite(&inputDim, sizeof(unsigned int), 1, file); + + //für jede Schicht: Dimension, Gewichte und Biases einlesen 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); + int outputDim = (unsigned int)layer.weights.rows; + fwrite(&outputDim, sizeof(unsigned int), 1, file); //dimensionen festlegen(weights) writeWeights(layer, file);