Habe meine neuralNetworkTests.c überarbeitet. Hatte das Speichern der

Layer falsch in Zeilen und Spalten statt fertige Werte. 8 Tests laufen
jetzt alle ohne fails durch.
This commit is contained in:
scheuerleinni103793 committed 2026-11-09 16:54:53 +01:00
1 parent 3af1970eb7
commit 8ee8de57d9
3 files changed
+26 -15

No files matched your search

+26 -15
View File
@@ -18,33 +18,44 @@ static void prepareNeuralNetworkFile(const char *path, const NeuralNetwork nn)
}
/*---Indifikationstag an den Anfang schreiben---*/
const char *fileTag = "info2_neural_network_file_format"; //Der Text der laut Angabe am Anfang der Datei stehen muss
const char *fileTag = "__info2_neural_network_file_format__"; //Der Text der laut Angabe am Anfang der Datei stehen muss
fwrite(fileTag, sizeof(char), strlen(fileTag), file); //Schreibbefehl mit Parametern (Vorgegebener Text soll geschrieben werden (Adresse), Größe eines Buchstaben, Länge des Textes, Zielort "file")
/*---Anzahl der Layer speichern---*/
fwrite(&nn.numberOfLayers, sizeof(int), 1, file); //Schreibbefehl mit Parametern (Die Adresse von "nn.numberOfLayers" soll geschrieben werden, eine ganze Zahl als "int" wird abgespeichert, es wird genau eine solche Zahl geschrieben, Zielort "file")
if(nn.numberOfLayers > 0) //Daten schreiben nur starten, wenn das Netz Layers besitzt
{
/*---Erste Eingabe-Dimension schreiben---*/
unsigned int inputDim = nn.layers[0].weights.cols; //Speichere den Wert des ersten Layers in "inputDim"
fwrite(&inputDim, sizeof(int), 1, file); //Schreibe 4 Bytes aus den Wert der Adresse "inputDim" als ganze Zahl in die Datei "file"
/*---Schleife für jeden Layer um Gewichte und Bias zu speichern---*/
for(int i = 0; i < nn.numberOfLayers; i++) //Schleife von 0 bis Anzahl der Layer
{
Layer layer = nn.layers[i]; //Benutzt aktuellen Layer mit Nummer "i" und benutzt Hilfsvariable "layer"
/*---Weights speichern---*/
fwrite(&layer.weights.rows, sizeof(int), 1, file); //Schreibbefehl mit Parametern mit (Anzahl Zeilen Weights (Adresse), eine ganze Zahl als "int" abspeichern, es wird genau eine solche Zahl gespeichert, Zielort "file") --> Speichert ab, wie viele Zeilen Gewichts-Tabelle hat
fwrite(&layer.weights.cols, sizeof(int), 1, file); //Schreibbefehl mit Parametern mit (Anzahl Spalten Weights (Adresse), eine ganze Zahl als "int" abspeichern, es wird genau eine solche Zahl gespeichert, Zielort "file") --> Speichert ab, wie viele Spalten Gewichts-Tabelle hat
/*---Output-Dimension dieses Layers schreiben---*/
unsigned int outputDim = layer.weights.rows; //Speichere die Anzahl der Zeilen in "outputDim"
fwrite(&outputDim, sizeof(int), 1, file); //Schreibe 4 Bytes den Wert der Adresse "outputDim" als ganze Zahl in die Datei "file"
/*---Weights Buffer speichern---*/
int weightCount = layer.weights.rows * layer.weights.cols; //Berechnet die Gesamtzahl der Zahlen in der Weight Tabelle
fwrite(layer.weights.buffer, sizeof(MatrixType), weightCount, file); //Schreibe den Wert der Adresse "layer.weights.buffer" als Typ von "MatrixType" mit der Anzahl von "weightCount" in die Datei "file" --> Speichert alle eigentlichen Zahlenwerte der Weights auf einmal in die Datei. Buffer ist bereits intern ein Zeiger, deswegen kein "&"
fwrite(layer.weights.buffer, sizeof(MatrixType), weightCount, file); //Schreibbefehl mit Parametern mit (Weight Buffer (Adresse), eine ganze Zahl in "MatrixType" abspeichern, es wird der zuvor berechnete Wert gespeichert, Zielort "file") --> Speichert alle eigentlichen Zahlenwerte der Weights auf einmal in die Datei. Buffer ist bereits intern ein Zeiger, deswegen kein "&"
/*---Bias speichern---*/
fwrite(&layer.biases.rows, sizeof(int), 1, file); //Schreibbefehl mit Parametern mit (Anzahl Zeilen Bias (Adresse), eine ganze Zahl als "int" abspeichern, es wird genau eine solche Zahl gespeichert, Zielort "file") --> Speichert ab, wie viele Zeilen Bias-Tabelle hat
fwrite(&layer.biases.cols, sizeof(int), 1, file); //Schreibbefehl mit Parametern mit (Anzahl Spalten Bias (Adresse), eine ganze Zahl als "int" abspeichern, es wird genau eine solche Zahl gespeichert, Zielort "file") --> Speichert ab, wie viele Spalten Bias-Tabelle hat
/*---Bias Buffer speichern---*/
int biasCount = layer.biases.rows * layer.biases.cols; //Berechnet die Gesamtzahl der Zahlen in der Bias Tabelle
fwrite(layer.biases.buffer, sizeof(MatrixType), biasCount, file); //Schreibe den Wert der Adresse "layer.biases.buffer" als Typ von "MatrixType" mit der Anzahl von "biasCount" in die Datei "file" --> Speichert alle eigentlichen Zahlenwerte der Weights auf einmal in die Datei. Buffer ist bereits intern ein Zeiger, deswegen kein "&"
}
fwrite(layer.biases.buffer, sizeof(MatrixType), biasCount, file); //Schreibbefehl mit Parametern mit (Bias Buffer (Adresse), eine ganze Zahl in "MatrixType" abspeichern, es wird der zuvor berechnete Wert gespeichert, Zielort "file") --> Speichert alle eigentlichen Zahlenwerte der Weights auf einmal in die Datei. Buffer ist bereits intern ein Zeiger, deswegen kein "&"
/*---Schreiben aller Layers beenden---*/
unsigned int terminator = 0; //Speichere den Wert 0 in "terminator"
fwrite(&terminator, sizeof(int), 1, file); //Schreibe den Wert der Adresse "terminator" im Binärformat in die Datei "file"
}
else
{
/*---Fehlerhafte Layer---*/
unsigned int zero = 0; //Speichere den Wert 0 in "zero"
fwrite(&zero, sizeof(int), 1, file); //0 als inputDimension
fwrite(&zero, sizeof(int), 1, file); //0 als outputDimension
}
/*---Datei wieder schließen---*/
@@ -193,7 +204,7 @@ void test_loadModelFailsOnWrongFileTag(void)
if(file != NULL)
{
const char *fileTag = "info2_neural_network_file_format";
const char *fileTag = "__info2_neural_network_file_format__";
fwrite(fileTag, sizeof(char), strlen(fileTag), file);
Binary file not shown.
Binary file not shown.