Як створити нейронну мережу на Пітоні: покрокова інструкція
Нейронні мережі – один з головних напрямків розвитку машинного навчання. Завдяки їх застосуванню можна вирішувати такі складні завдання, як розпізнавання людей на зображеннях чи відео, обробка тексту, точне моделювання та багато іншого. Сьогодні ми розглянемо, як створити просту нейронну мережу на Python, використовуючи бібліотеки TensorFlow та Keras.
Що таке нейромережа?
Нейронна мережа або нейромережа — це комплекс програмних даних та інструментів, які імітують роботу людського мозку. Нейромережа складається з декількох рівнів (шарів) штучних нейронів, які обмінюються інформацією між собою, посилаючи сигнали. Штучні нейрони — це прості процесори, які об’єднавших між собою, здатні виконувати досить складні завдання.
Існують різні типи нейронних мереж, такі як прямопрохідні (Feedforward Neural Networks), згорткові (Convolutional Neural Networks, CNN) та рекурентні (Recurrent Neural Networks, RNN). На відміну від звичайних настільних чи мобільних додатків, нейромережі не програмуються, а обмежено самостійно навчаються. В них немає алгоритмічного коду, як в програмі. Під час навчання нейрони знаходять складні залежності між різними типами даних.
Зараз це важко уявити, але принцип навчання нейромереж був описаний ще в 1949 році вченим Дональдом Хеббом. Однак протягом наступних десятиліть ця ідея розвивалась лише в теоретичному напрямку: комп’ютерне обладнання було надто слабким для практичної реалізації. Лише у 80-х роках вчені зуміли створити першу комп’ютерну модель для розпізнавання абетки та поштових індексів. Далі технологія почала поступово удосконалюватись. Наприкінці 90-х комп’ютер навчили розпізнавати рукописний текст, нейронні мережі почали використовувати для виявлення раку молочної залози на мамограмах та моделювання структури білка.
Справжній прорив у розвитку та застосуванні нейромереж стався в 2011 році, коли нейромережа вперше перевершила людські можливості на конкурсі з розпізнавання візуальних образів. Паралельно йшов процес удосконалення комп’ютерного обладнання. Завдяки більш потужним графічним процесорам процес навчання нейромереж почав досягати нечуваних висот.
Чому саме Python?
Серед десятків мов програмування Python виявився найбільш затребуваним, коли справа стосується створення та навчання нейронних мереж. Цьому є декілька причин. На перший погляд, може здатись, что все це через лаконічний синтаксис Python. І справді, код Python більш стислий, ніж, наприклад у Java. Але річ не в тім. Одна з головних причин, чому Пайтон такий популярний в розробці нейромереж, полягає в тому, що він має потужну екосистему бібліотек для розробки моделей машинного навчання. Це, в першу чергу, TensorFlow та Keras. Також до цього числа слід віднести PyTorch, scikit-learn, NumPy і Pandas.
Крім бібліотек, на користь Python грає активна спільнота, яка надає велику підтримку проектам у сфері штучного інтелекту. До того ж, Python дозволяє інтегруватися з мовами на зразок C++ та Fortran, які можна використовувати для обчислювально інтенсивних частин нейронних мереж.
Створення нейромережі на Python
Щоб створити нейромережу на Python, спочатку потрібно підготувати для цього відповідне середовище. Нам знадобиться встановити Python (якщо він у вас ще досі не встановлений) та основні бібліотеки.
Python можна завантажити на офіційному сайті. Для встановлення бібліотек TensorFlow та Keras запустіть наступну команду:
pip install tensorflow
Тепер переходимо до створення базової нейронної мережі для розпізнавання літер англійського алфавіту на Python. Ми будемо використовувати синтетичний набір даних, який можна створити самостійно, або можна завантажити попередньо створений набір, наприклад, EMNIST Letters, який містить зображення літер англійського алфавіту.
Передбачається, що що ми вже маємо готовий набір даних, розділений на зображення та відповідні мітки літер.
# Імпорт необхідних бібліотек import tensorflow as tf from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, Flatten, Dropout from tensorflow.keras.utils import to_categorical from tensorflow.keras.datasets import emnist # Завантаження даних EMNIST (літери) (x_train, y_train), (x_test, y_test) = emnist.load_data(split='letters') # Нормалізація даних (перетворення значень пікселів у діапазон [0, 1]) x_train, x_test = x_train / 255.0, x_test / 255.0 # Перетворення міток у категорійний формат (кодування one-hot) y_train = to_categorical(y_train - 1, 26) # Віднімаємо 1, бо літери позначені від 1 до 26 y_test = to_categorical(y_test - 1, 26) # Побудова нейронної мережі model = Sequential([ Flatten(input_shape=(28, 28)), # Перетворення 28x28 зображень у вектори Dense(256, activation='relu'), # Прихований шар з 256 нейронами та ReLU Dropout(0.5), # Dropout для запобігання перенавчанню Dense(128, activation='relu'), # Ще один прихований шар Dropout(0.5), # Додатковий Dropout Dense(26, activation='softmax') # Вихідний шар з 26 нейронами (по одному на літеру) ]) # Компіляція моделі model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy']) # Навчання моделі model.fit(x_train, y_train, epochs=10, batch_size=64, validation_split=0.2) # Оцінка моделі на тестових даних test_loss, test_acc = model.evaluate(x_test, y_test) print(f'Точність на тестових даних: {test_acc:.4f}')
Складові елементи
Завантаження та підготовка даних:
- Ми використовуємо набір даних EMNIST для літер, який містить зображення літер англійського алфавіту у форматі 28×28 пікселів.
- Нормалізуємо зображення, перетворюючи значення пікселів у діапазон [0, 1].
- Перетворюємо мітки на категорійний формат one-hot, щоб нейронна мережа могла використовувати їх як цілі.
Побудова моделі:
- Flatten: перетворює кожне зображення 28×28 у вектор для подальшої обробки.
- Dense(256, activation=’relu’): перший щільний шар з 256 нейронами та функцією активації ReLU.
- Dropout(0.5): регуляризація Dropout, яка випадковим чином відключає 50% нейронів на кожній епосі, щоб зменшити перенавчання.
- Ще один щільний шар з 128 нейронами та Dropout.
- Dense(26, activation=’softmax’): вихідний шар з 26 нейронами (по одному на кожну літеру) з функцією Softmax, яка дає ймовірності для кожного класу.
Компіляція моделі:
Використовуємо оптимізатор adam, функцію втрат categorical_crossentropy (оскільки у нас багатокласова класифікація) та метрику accuracy.
Навчання нейромережі
Навчаємо модель на 10 епохах із розміром пакету 64, з використанням 20% даних для валідації. Після цього оцінюємо точність моделі на тестових даних.
Процес навчання полягає в подачі на модель набору навчальних даних і налаштуванні ваг мережі для мінімізації функції втрат. Цей процес ітеративний і повторюється протягом певної кількості епох, протягом яких модель переглядає весь набір даних і оновлює ваги.
Під час навчання нейронна мережа проходить наступні кроки:
- Прямий прохід (forward pass): модель приймає дані та генерує передбачення.
- Обчислення похибки: порівнює передбачення з правильними мітками та обчислює значення функції втрат.
- Зворотне поширення похибки (backpropagation): мережа коригує свої ваги, щоб мінімізувати похибку.
history = model.fit(x_train, y_train, epochs=10, batch_size=32, validation_data=(x_val, y_val))
Ця модель – лише початковий приклад. Щоб покращити результат, ви можете застосувати додаткові шари, використати інші методи регуляризації, або експериментувати з іншими гіперпараметрами, такими як розмір пакетів чи кількість епох.
Збереження та розгортання моделі
Коли модель готова, її можна зберегти для подальшого використання, щоб не навчати кожного разу. Збережену модель можна розгорнути для використання в реальному часі або інтегрувати в додаток.
model.save("my_model.h5") # Збереження моделі у форматі HDF5
Варто пам’ятати, що оволодіння кількома базовими прикладами створення нейромереж не зробить з вас крутого спеціаліста. Для початку вам треба мати впевнені навички роботи з Python, знання лінійної алгебри та основ математичного аналізу. Нейронні мережі залежать від матриць, векторів та градієнтів, тому розуміння цих концепцій допоможе легше розуміти їх роботу.
Також вам доведеться ознайомитися з бібліотеками для машинного навчання: не тільки TensorFlow та Keras, але й PyTorch і scikit-learn. Далі треба вивчити базові концепції машинного навчання: регресію та класифікацію, обробку даних, попрактикуватися в роботі з готовими наборами даних: MNIST, CIFAR-10, Fashion MNIST. Навчитися класифікувати текст.
Коли ви перейдете до практики, починати краще з простих проектів: розпізнавання рукописних цифр чи класифікації сортів квітів. Якщо все вдається, тоді переходьте до більш складних завдань: побудови згорткової нейронної мережі (CNN) для класифікації зображень або рекурентної нейронної мережі (RNN) для аналізу послідовностей.
Поступово модифікуйте їх, додавайте більше шарів, змінюйте гіперпараметри або експериментуйте з іншими архітектурами. І лише після цього переходьте до проектів з реального життя: наприклад, розпізнавання об’єктів.
Висновок
Створення простої нейронної мережі на мові програмування Python можливе завдяки використанню бібліотек TensorFlow та Keras. Наведені в цій публікації приклади демонструють базову нейронну мережу для класифікації літер. У наступний раз, для складніших завдань, можна додавати інші типи шарів, такі як згорткові (Conv2D), рекурентні (LSTM) та інші, щоб підвищити потужність моделі.
Ця стаття може стати основою для створення нейронних мереж, з неї ви можете почати вивчення більш складних архітектур: гіперпараметрів, додавання нових шарів чи створення глибших моделей для покращення результатів.
Favbet Tech – це ІТ-компанія зі 100% українською ДНК, що створює досконалі сервіси для iGaming і Betting з використанням передових технологій та надає доступ до них. Favbet Tech розробляє інноваційне програмне забезпечення через складну багатокомпонентну платформу, яка здатна витримувати величезні навантаження та створювати унікальний досвід для гравців.
Сообщить об опечатке
Текст, который будет отправлен нашим редакторам: