{"id":21546977,"url":"https://github.com/lexxai/goit_python_ds_hw_09","last_synced_at":"2026-04-16T05:33:30.399Z","repository":{"id":231796675,"uuid":"762240329","full_name":"lexxai/goit_python_ds_hw_09","owner":"lexxai","description":"Модуль 9.  Підбір гіперпараметрів НМ. Глибоке навчання. Tensorflow. Keras.","archived":false,"fork":false,"pushed_at":"2024-02-28T18:17:17.000Z","size":18623,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-06-14T19:09:55.953Z","etag":null,"topics":["adam-optimizer","data-science","google-colab","keras","keras-tensorflow","numpy","python"],"latest_commit_sha":null,"homepage":"","language":"Jupyter Notebook","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lexxai.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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":"2024-02-23T11:17:13.000Z","updated_at":"2024-04-06T00:03:19.000Z","dependencies_parsed_at":null,"dependency_job_id":"9c90fa9f-da51-4182-be18-08951190a6fe","html_url":"https://github.com/lexxai/goit_python_ds_hw_09","commit_stats":null,"previous_names":["lexxai/goit_python_ds_hw_09"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/lexxai/goit_python_ds_hw_09","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lexxai%2Fgoit_python_ds_hw_09","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lexxai%2Fgoit_python_ds_hw_09/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lexxai%2Fgoit_python_ds_hw_09/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lexxai%2Fgoit_python_ds_hw_09/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lexxai","download_url":"https://codeload.github.com/lexxai/goit_python_ds_hw_09/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lexxai%2Fgoit_python_ds_hw_09/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31872652,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-15T15:24:51.572Z","status":"online","status_checked_at":"2026-04-16T02:00:06.042Z","response_time":69,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["adam-optimizer","data-science","google-colab","keras","keras-tensorflow","numpy","python"],"created_at":"2024-11-24T06:13:49.921Z","updated_at":"2026-04-16T05:33:30.377Z","avatar_url":"https://github.com/lexxai.png","language":"Jupyter Notebook","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Модуль 9.  Підбір гіперпараметрів НМ. Глибоке навчання. Tensorflow. Keras.\n\n*З циклу [домашніх завдань Python Data Science](https://github.com/lexxai/goit_python_data_sciense_homework).*\n\n# Домашнє завдання\n\nВ якості домашнього завдання вам пропонується створити нейронну мережу за допомогою механізмів Keras, яка буде класифікувати товари із датасету [fasion_mnist](https://www.tensorflow.org/datasets/catalog/fashion_mnist).\n\nВам належить запропонувати свою власну архітектуру мережі. Точність найнаївнішої, але адекватної нейромережі становить приблизно 91%. Точність вашої моделі повинна бути не нижчою за цей показник. Щоб досягти таких значень вам знадобиться поекспериментувати з гіперпараметрами мережі:\n\n- кількість шарів;\n- кількість нейронів;\n- функції активації;\n- кількість епох;\n- розмір батчу;\n- вибір оптимізатора;\n- різні техніки регуляризації і т.д.\n\nВикористайте вивчені техніки виявлення проблем навчання нейронної мережі, і потім поекспериментуйте.\n\nРішення оформіть у вигляді окремого ноутбука.\n\n\n# Результати\n\n- [goit_python_ds_hw_09.ipynb](goit_python_ds_hw_09.ipynb)\n- [Colab (goit_python_ds_hw_09.ipynb)](https://colab.research.google.com/drive/13IS9pP4JoGg4gH3kYhC9Qr0k8Lf2JpjB?usp=sharing)\n\n## Типова архітектура нейронної мережі моделі 1.\n\n```\n_________________________________________________________________\n Layer (type)                Output Shape              Param #   \n=================================================================\n INPUT (Flatten)             (None, 784)               0         \n                                                                 \n Hidden_Layer_1 (Dense)      (None, 256)               200960    \n                                                                 \n Hidden_Layer_2 (Dense)      (None, 512)               131584    \n                                                                 \n Hidden_Layer_3 (Dense)      (None, 256)               131328    \n                                                                 \n Hidden_Layer_4 (Dense)      (None, 32)                8224      \n                                                                 \n OUTPUT (Dense)              (None, 10)                330       \n                                                                 \n=================================================================\nTotal params: 472426 (1.80 MB)\nTrainable params: 472426 (1.80 MB)\nNon-trainable params: 0 (0.00 Byte)\n```\n\nIL=784, HL1=256 (relu), HL2=512 (relu, L2) , HL3=256 (relu), HL4=32 (relu), OL=10 (softmax)\n\n## Графік процесу навчання моделей\n\n![Model_1_L2_0.025_loss_acc](Model_1_L2_0.025_loss_acc.png)\n![Model_1_L2_0.025_ca](Model_1_L2_0.025_ca.png)\n![Model_1_no_reg_ca](Model_1_no_reg_ca.png)\n![Model_1_L2_0.1_ca](Model_1_L2_0.1_ca.png)\n![Model_2_ca](Model_2_ca.png)\n![Model_2_L2_0.1_ca](Model_2_L2_0.1_ca.png)\n![Model_2_L2_1_ca](Model_2_L2_1_ca.png)\n![Model_3_DO_0.2_ca](Model_3_DO_0.2_ca.png)\n![Model_3_DO_0.5_ca](Model_3_DO_0.5_ca.png)\n![Model_2_lrelu_ca_ca](Model_2_lrelu_ca.png)\n![Model_2_lrelu_b32_ca](Model_2_lrelu_b32_ca.png)\n![Model_2_lrelu_sgd_ca](Model_2_lrelu_sgd_ca.png)\n![Model_2_lrelu_bnorm_ca](Model_2_lrelu_bnorm_ca.png)\n\n# Порівняння моделей\n\n![bar_va](bar_va.png)\n\n\n## Результати навчання (classification report)\n```\nClassification report for: 'Model_2'\n                 precision    recall  f1-score   support\n\n0 - T-shirt/top       0.79      0.92      0.85      1000\n1 - Trouser           0.99      0.97      0.98      1000\n2 - Pullover          0.80      0.81      0.80      1000\n3 - Dress             0.88      0.89      0.89      1000\n4 - Coat              0.76      0.86      0.81      1000\n5 - Sandal            0.97      0.97      0.97      1000\n6 - Shirt             0.81      0.59      0.68      1000\n7 - Sneaker           0.95      0.95      0.95      1000\n8 - Bag               0.99      0.96      0.97      1000\n9 - Ankle boot        0.95      0.97      0.96      1000\n\n       accuracy                           0.89     10000\n      macro avg       0.89      0.89      0.89     10000\n   weighted avg       0.89      0.89      0.89     10000\n\nAccuracy: 88.80%\n```\n\n## Результати навчання (Confusion Matrix)\n\n![Model_2_cm](Model_2_cm.png)\n\n['0 - T-shirt/top', '1 - Trouser', '2 - Pullover', '3 - Dress', '4 - Coat', '5 - Sandal', '6 - Shirt', '7 - Sneaker', '8 - Bag', '9 - Ankle boot']\n\n## Візуалізація результатів предбачення\n\n![predict](predict.png)\n\n# Висновок\n\nВикористано ряд моделей нейронних мереж для заданого набору даних \"Fashion-MNIST\".\n\nДля порівняння та вибору найкращої моделі були побудовані декілька моделей з різною кількістю шарів, та різними значеннями гіперпараметрів.\n\nДля забезпечення зупинення перенавчання моделі (overfit) застосовано додавання регуляризатора в одному з шарів типу L2, з різними значеннями. Також протестовано моделі на різних активаційних функціях таких як \"relu\", та \"leaky_relu\".\n\nВикористано оптимізаційні алгоритми \"Adam\" та \"SGD\" для пошуку вагів моделі. \n\nКрок навчання використано динамічний залежно від епохи. Залежність може бути двоступенева - до 7 епохи 0.005, далі крок навчання дорівнює 0.001, та експоненціальна.\n\nДля автоматичного зупинення пошуку нових ваг для моделі було застосовано \"Early stop\" як по метриці \"val_loss\" (min) patience=5, так і по метриці \"val_accuracy\" (max) patience=10.\n\nПобудовані графіки залежностей для кожної з моделей, з відображенням найкращої епохи для вагів, котрі були вибранні. Де можна побачити тенденцію моделі до перенавчання.\n\nЗавдяки застосуванню \"Early stop\" загальні характеристики моделей у на діаграмі \"Validated accuracy\" певним чином вирівнялися, і перенавчання своєчасно було зупинено.\n\nВибір найкращої моделі базується на її простоті, швидкості та якості за мінімальними значеннями втрат \"val_loss\", та максимальним значенням якості \"val_accuracy\".\n\nЗа вибраною моделлю \"Model_2\" побудовані випадкові передбачення для 10 зображень з тестової вибірки набору даних та результати побачення де червоний колір означає передбачення було помилкове.\n\nЗа значеннями результатів confusion matrix бачимо що найгірша ситуація з прогнозуванням категорії 6 - 'Shirt' [Сорочка] яка має найбільшу кількість помилок з категорією 0 'T-shirt/top' [Футболка/Топ] та '4 - Coat' [Пальто], що і показала тестова вибірка.\n\nМоделі та історії розрахунків зберігаються до [архівного файлу](https://drive.google.com/file/d/10IrPreMKLTAT7BKhK693X0X1JnvygJnQ/view?usp=drive_link), і завантажуються з нього для пришвидшення отримання вже розрахованих результатів.\n\nЗ метою порівняння моделі де валідаційна частина використовується як 10% від тестової частини, а тестова частина датасету виключно для перевірки моделі то для цього була створена [окрема версія файлу проєкту](goit_python_ds_hw_09_test_is_test.ipynb).\n\n\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flexxai%2Fgoit_python_ds_hw_09","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flexxai%2Fgoit_python_ds_hw_09","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flexxai%2Fgoit_python_ds_hw_09/lists"}