Як створити нейронну мережу на Пітоні: покрокова інструкція

Дмитро Сімагін

Нейронні мережі – один з головних напрямків розвитку машинного навчання. Завдяки їх застосуванню можна вирішувати такі складні завдання, як розпізнавання людей на зображеннях чи відео, обробка тексту, точне моделювання та багато іншого. Сьогодні ми розглянемо, як створити просту нейронну мережу на 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}')

 

Складові елементи

Завантаження та підготовка даних:

  1. Ми використовуємо набір даних EMNIST для літер, який містить зображення літер англійського алфавіту у форматі 28×28 пікселів.
  2. Нормалізуємо зображення, перетворюючи значення пікселів у діапазон [0, 1].
  3. Перетворюємо мітки на категорійний формат one-hot, щоб нейронна мережа могла використовувати їх як цілі.

Побудова моделі:

  1. Flatten: перетворює кожне зображення 28×28 у вектор для подальшої обробки.
  2. Dense(256, activation=’relu’): перший щільний шар з 256 нейронами та функцією активації ReLU.
  3. Dropout(0.5): регуляризація Dropout, яка випадковим чином відключає 50% нейронів на кожній епосі, щоб зменшити перенавчання.
  4. Ще один щільний шар з 128 нейронами та Dropout.
  5. Dense(26, activation=’softmax’): вихідний шар з 26 нейронами (по одному на кожну літеру) з функцією Softmax, яка дає ймовірності для кожного класу.

Компіляція моделі:

Використовуємо оптимізатор adam, функцію втрат categorical_crossentropy (оскільки у нас багатокласова класифікація) та метрику accuracy.

Навчання нейромережі

Навчаємо модель на 10 епохах із розміром пакету 64, з використанням 20% даних для валідації. Після цього оцінюємо точність моделі на тестових даних.

Процес навчання полягає в подачі на модель набору навчальних даних і налаштуванні ваг мережі для мінімізації функції втрат. Цей процес ітеративний і повторюється протягом певної кількості епох, протягом яких модель переглядає весь набір даних і оновлює ваги.

Під час навчання нейронна мережа проходить наступні кроки:

  1. Прямий прохід (forward pass): модель приймає дані та генерує передбачення.
  2. Обчислення похибки: порівнює передбачення з правильними мітками та обчислює значення функції втрат.
  3. Зворотне поширення похибки (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) та інші, щоб підвищити потужність моделі.

Ця стаття може стати основою для створення нейронних мереж, з неї ви можете почати вивчення більш складних архітектур: гіперпараметрів, додавання нових шарів чи створення глибших моделей для покращення результатів.

Останні статті

Більше 8 млрд грн податків. Стільки сплатили резиденти Дія.City в І кварталі 2025 року

Резиденти Дія.City сплатили до бюджету понад 8 млрд грн податків в І кварталі 2025 року.…

18.04.2025

Китайських офісних працівників закликають менше працювати. Це має допомогти місцевій економіці

У Китаї закликають офісних працівників не працювати надто багато — держава сподівається, що вільний час…

18.04.2025

ChatGPT значно покращив пошук місць по фото. Це посилює проблеми конфіденційності

Експерти звертають увагу на тривожну тенденцію: люди все частіше використовують ChatGPT, щоб визначити місцезнаходження, зображене…

18.04.2025

Середовище розробки IntelliJ IDEA оновлено до версії 2025.1

Компанія JetBrains випустила нову версію мультимовного середовища розробки IntelliJ IDEA 2025.1. Оновлена IDE отримала численні…

18.04.2025

Discord впроваджує функцію сканування обличчя для перевірки віку користувачів

Платформа обміну миттєвими повідомленнями Discord впроваджує функцію перевірки віку за допомогою сканування обличчя. Зараз вона…

18.04.2025

Wikipedia випустила спеціальний датасет, щоб відволікти увагу ботів

Wikipedia намагається захистити себе від тисяч різноманітних ботів-скрейперів, які сканують дані цієї платформи для навчання…

18.04.2025