{"id":28957877,"url":"https://github.com/raphaelthegreat/machine_learning_assignment","last_synced_at":"2025-06-23T22:08:07.402Z","repository":{"id":298967874,"uuid":"1001124033","full_name":"raphaelthegreat/machine_learning_assignment","owner":"raphaelthegreat","description":null,"archived":false,"fork":false,"pushed_at":"2025-06-13T21:31:05.000Z","size":147,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-06-13T22:18:32.377Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Jupyter Notebook","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/raphaelthegreat.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-06-12T21:30:27.000Z","updated_at":"2025-06-13T21:31:09.000Z","dependencies_parsed_at":"2025-06-13T22:29:02.394Z","dependency_job_id":null,"html_url":"https://github.com/raphaelthegreat/machine_learning_assignment","commit_stats":null,"previous_names":["raphaelthegreat/machine_learning_assignment"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/raphaelthegreat/machine_learning_assignment","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raphaelthegreat%2Fmachine_learning_assignment","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raphaelthegreat%2Fmachine_learning_assignment/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raphaelthegreat%2Fmachine_learning_assignment/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raphaelthegreat%2Fmachine_learning_assignment/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/raphaelthegreat","download_url":"https://codeload.github.com/raphaelthegreat/machine_learning_assignment/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raphaelthegreat%2Fmachine_learning_assignment/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261565393,"owners_count":23177756,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-06-23T22:08:02.565Z","updated_at":"2025-06-23T22:08:07.397Z","avatar_url":"https://github.com/raphaelthegreat.png","language":"Jupyter Notebook","funding_links":[],"categories":[],"sub_categories":[],"readme":"## Στόχοι\n\nΣτόχος αυτής της εργασίας ήταν η βελτιστοποίηση ενός μοντέλου αναγνώρισης χειρόγραφων αριθμών, για το οποίο μας δόθηκε μια αρχική υλοποίηση.\nΗ βελτιστοποίηση έγινε με hyperparameter tuning, όπου πειραματίστηκα με τις ρυθμίσεις του υπάρχοντος μοντέλου με σκοπό να αυξηθεί η ακρίβεια του\nκαι με γενικότες αλλαγές στα δεδομένα εισόδου και στην αρχιτεκτονική του.\n\n## Hyperparameter tuning\n\nΑρχικά στην πρώτη κατηγορία πειραματίστηκα με διάφορα epochs, αριθμό κρυφών επιπέδων και unit μέσα στα επίπεδα αυτά. Γενικά τα αποτέλεσματα έδειξαν ότι όσο αυξάνεται το epoch τόσο αυξάνεται και το accuracy.\nΕπίσης τα units των κρυφών επιπέδων είχαν μια σημαντική επίδραση στο accuracy και λιγότερη, αλλά πάλι υπαρκτή, μια αύξηση των κρυφών επιπέδων. Κατέληξα στα 20 epochs με 4 κρυφά επίπεδα απο 512 units.\nΩστόσο μια αναζήτηση που έκανα δηλώνει πως 50 ίσως είναι καλύτερα αλλά για αυτό το πείραμα η τιμή αυτή ήταν απαγορευτική υπολογιστικά, άρα δεν πήγα τόσο ψηλά (https://datascience.stackexchange.com/a/106273)\n\nΠειράματα με το learning rate έδειξαν ότι 0.003 ήταν η καλύτερη τίμη. Πιο μεγάλες τιμές όπως 0.005 οδήγησαν σε μείωση του accuracy (έχω τίμες σε πινακάκι στο ipynb)\nΓια activation function στα κρυφά επίπεδα softplus και relu είχαν πολύ μεγάλο accuracy (0.9999 για το πρώτο) ενώ το softmax ήταν πολύ χαμηλό (δεν είμαι 100% σίγουρος για τα αποτελέσματα η διαφορά είναι λίγο δραματική)\n\n# Improvements\n\nΚάνοντας μια γρήγορη αναζήτηση στο ιντερνετ βρήκα αυτό το άρθρο https://nagadakos.github.io/2018/09/23/dropout-effect-discussion/ που πρότεινε τη χρήση Dropout επιπέδων για αποφυγή overfitting,\nάρα ήταν η πρώτη βελτίωση που τέσταρα.\n\nΕπίσης βρήκα και τη μέθοδο του batch normalization (https://medium.com/@anderaquerretamontoro/99-46-accuracy-on-mnist-without-cnn-712042530420) όπου η έξοδος κάθε επιπέδου του δικτύου κανονικοποιείται\nπριν την τροφοδοσία της στο επόμενο επίπεδο. Μόνο αυτή η αλλαγή είχε καλή βελτίωση στο accuracy φέρνοντας το κοντά στο 0.9932. Για την υλοποίηση πρόσθεσα ένα tf.keras.layers.Flatten(input_shape=(28, 28)), layer μετά το input και tf.keras.layers.BatchNormalization() μετα απο κάθε hidden layer για την κανονικοποίηση.\n\nΕκτός από το ίδιο μοντέλο μια προφανής βελτιώση είναι να δώσουμε περισσότερο variation στα δεδομένα, αναποδογυρίζοντας τα, περιστρέφοντας τα με το scipy.ndimage.rotate etc.\n\n### New hyperparameters\n\nLearning Rate = 0.003\nEpochs = 20\nActivation = softplus\nDropout = 0.25\n\n## Questions\n\nΘεωρείτε πως τα δεδομένα της MNIST είναι καλά για την εκπαίδευση ενός μοντέλου?\nΑιτιολογείστε.\n\n- Ναι, τα δοθέντα δεδομένα είναι αρκετά και έχουν διαφορές/μοναδικότητα μεταξύ τους που περιορίζει το memorization\n\nΘεωρείτε πως όλα τα pixel είναι σημαντικά για την πρόβλεψη της κλάσης ενός\nψηφίου\n\n- Κάθε αριθμός όριζεται απο τα άσπρα pixel, άρα τα μαύρα είναι σχεδόν άχρηστα\n\nΣε ποιες περιπτώσεις είναι καλή ιδέα να χρησιμοποιηθούν Βαθιά Νευρωνικά Δίκτυα?\n\n- Όταν η ομαδοποίηση των δεδομένων έχει υπερβολικά πολλές παραμέτρους που είναι δύσκολο να γραφτεί κώδικας για την εργασία αυτή.\n  Επίσης όταν τα δεδομένα είναι πιο οπτικής φύσεως είναι αρκετά δύσκολο το παραδοσιακό parsing και \"κατανόηση\" τους.\n\n  Η Βαθιά Μάθηση μπορεί να χρησιμοποιηθεί και στους 3 κλάδους της Μηχανικής\nΜάθησης? (Supervised Learning, Unsupervised Learning και Reinforcement\nLearning)\n\n- Ναι φυσικά\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fraphaelthegreat%2Fmachine_learning_assignment","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fraphaelthegreat%2Fmachine_learning_assignment","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fraphaelthegreat%2Fmachine_learning_assignment/lists"}