generated from freudenreichan/info2Praktikum-NeuronalesNetz
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:
1 parent
3af1970eb7
commit
8ee8de57d9
3 files changed
+26
-15
No files matched your search
@@ -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.
Reference in new issue
Block a user