Ich habe eine Frage zum Lesen von MNIST-Datensätzen. Ich habe die Idee, wie der MNIST-Datensatz aufgebaut ist. Ich habe jedoch keine Ahnung, wie es durch einen folgenden Code gelesen wird. Einige von euch denken vielleicht, dass das Ergebnis von Couts offensichtlich ist (ich habe Werte als Kommentar geschrieben). Aber für mich ergibt das keinen Sinn, da es die gleiche genaue Funktion viermal mit der gleichen Eingabe verwendet, aber es bekommt jedes Mal die unterschiedliche Ausgabe. Wie ist das möglich? Bitte lassen Sie es mich wissen, wenn meine Frage zweideutig ist.Wie wird die Mnist-Datei durch den folgenden Code gelesen?
Vielen Dank.
-Code starten:
typedef unsigned char BYTE;
int main()
{
...
FILE *fp = fopen("MNIST/train-images.idx3-ubyte", "rb");
// delcare function;
int magicNumber = readFlippedInteger(fp);
int numImages = readFlippedInteger(fp);
int numRows = readFlippedInteger(fp);
int numCols = readFlippedInteger(fp);
cout << magicNumber << endl; // 2051
cout << numImages << endl; // 60000
cout << numRows << endl; // 28
cout << numCols << endl; // 28
...
}
int readFlippedInteger(FILE *fp)
{
int ret = 0;
BYTE *temp;
temp = (BYTE*)(&ret);
fread(&temp[3], sizeof(BYTE), 1, fp);
fread(&temp[2], sizeof(BYTE), 1, fp);
fread(&temp[1], sizeof(BYTE), 1, fp);
fread(&temp[0], sizeof(BYTE), 1, fp);
return ret;
}
'readFlippedInteger' liest bei jedem Aufruf 4 Bytes aus der Datei. –