diff --git a/Startcode/neuralNetworkTests.c b/Startcode/neuralNetworkTests.c index efc1ab7..a17551b 100644 --- a/Startcode/neuralNetworkTests.c +++ b/Startcode/neuralNetworkTests.c @@ -9,38 +9,53 @@ static void prepareNeuralNetworkFile(const char *path, const NeuralNetwork nn) { // TODO - FILE *file = fopen(path, "wb"); + + // Datei im binären Schreibmodus öffnen + FILE *file = fopen(path, "wb"); // wb = write binary (weights, biases, matrix dimensions) + + // Beenden, wenn die Datei nicht geöffnet werden konnte if (file == NULL) { return; } - const char *fileTag = "__info2_neural_network_file_format__"; - fwrite(fileTag, sizeof(char), strlen(fileTag), file); - + // Dateiformat-Kennung definieren und in die Datei schreiben + const char *fileTag = "__info2_neural_network_file_format__"; // string, Kennzeichnung + fwrite(fileTag, sizeof(char), strlen(fileTag), file); // Daten in eine Datei schreiben (data, size of char 1 byte, number of chars - null terminator, file) + + // Überprüfen, ob das neuronale Netzwerk Layer enthält if (nn.numberOfLayers > 0) { + + // Dimensionen des ersten Layers schreiben fwrite(&nn.layers[0].weights.cols, sizeof(int), 1, file); fwrite(&nn.layers[0].weights.rows, sizeof(int), 1, file); + // Alle Layer des neuronalen Netzwerks durchlaufen for (unsigned int i = 0; i < nn.numberOfLayers; i++) { + + // Zeilenanzahl der nachfolgenden Layer schreiben if (i > 0) { fwrite(&nn.layers[i].weights.rows, sizeof(int), 1, file); } + // Alle Gewichte des aktuellen Layers schreiben fwrite(nn.layers[i].weights.buffer, sizeof(MatrixType), nn.layers[i].weights.rows * nn.layers[i].weights.cols, file); + // Alle Bias-Werte des aktuellen Layers schreiben fwrite(nn.layers[i].biases.buffer, sizeof(MatrixType), nn.layers[i].biases.rows * nn.layers[i].biases.cols, file); } } + // Null als Endmarkierung schreiben (Ende des Layers markieren) int endDimension = 0; fwrite(&endDimension, sizeof(int), 1, file); + // Datei schließen fclose(file); }