Informatik 2 Praktikum - Aufgabe 2: Neuronales Netz Aufgabenverteilung =================================================== Aufwand in Prozent vom Gesamtaufwand (inkl. optionaler Aufgabe), geschaetzt anhand der Aufgabenstellung. Gemeinsam (jeder einmal) ------------------------ - Projektstruktur anschauen: welche Module gibt es, welche Funktionen fehlen? - Startprogramm bauen und testen: make mnist_initial ./mnist mnist_test.info2 mnist_model.info2 Maxi - Matrix-Modul (ca. 35 %) ------------------------------ - Struktur "Matrix" an geeigneter Stelle (matrix.h) anlegen: Anzahl Zeilen, Anzahl Spalten, Zeiger auf die Werte. - Fehlende Funktionen in matrix.c implementieren (Hinweise aus den Unittests). - Funktion add mit zwei Modi: * Elementweise Addition (gleiche Groesse) * Broadcasting: Matrix + Spaltenvektor (Spalten = 1, gleiche Zeilenanzahl), Vektorwert jeder Zeile wird auf alle Elemente der Zeile addiert. - Fertig, wenn gruen: make matrixTests && ./runMatrixTests - WICHTIG: Das Matrix-Struct moeglichst frueh pushen, David braucht es fuer die Tests des neuronalen Netzes. Hannes - Bilder einlesen (ca. 35 %) ----------------------------------- - readImages in imageInput.c implementieren (Strukturen stehen in imageInput.h). - Dateiformat (Binaerdatei, im Binaermodus "rb" oeffnen): * String "__info2_image_file_format__" * Anzahl Bilder (unsigned short) * Breite (unsigned short) * Hoehe (unsigned short) * pro Bild: Breite*Hoehe Pixel (unsigned char, 0-255), dann Label (unsigned char, 0-9) - Zuerst sinnvolle Hilfsfunktionen als static in imageInput.c schreiben (z.B. Header pruefen, Header lesen, ein Bild lesen) und dafuer eigene Unittests in imageInputTests.c ergaenzen. - Danach readImages mit den Hilfsfunktionen zusammenbauen. - Fertig, wenn gruen: make imageInputTests && ./runImageInputTests - Tipp: nach jedem Teilschritt testen und committen. David - Neuronales Netz, Feinschliff, Optional (ca. 30 %) --------------------------------------------------------- - prepareNeuralNetworkFile() in neuralNetworkTests.c implementieren (ca. 15 %): Erzeugt eine gueltige Testdatei. Dateiformat in neuralNetwork.c nachlesen (Lesefunktion) und genau spiegelbildlich schreiben. Datei beginnt mit "__info2_neural_network_file_format__", danach die Schichten. - Fertig, wenn gruen: make neuralNetworkTests && ./runNeuralNetworkTests - Feinschliff (ca. 5 %), wenn alle Teile da sind: * Projekt kompiliert ohne Warnungen * alle Unittests laufen durch * make mnist && ./mnist mnist_test.info2 mnist_model.info2 - Optional (ca. 10 %): Ziffern mit der Maus malen und erkennen lassen, in mnistVisualization.c mit Raylib. Git-Regeln im Team ------------------ - Vor jedem Arbeiten: git pull - Nur eigene Dateien committen: git add (nicht git add .) - Ordner und Dateien NICHT verschieben oder umbenennen. - .idea/ und cmake-build-*/ nicht committen.