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

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

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

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

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

Інсайдери OpenAI розповіли, що чекати від GPT-5, яка з’явиться в липні

Флагманська LLM-модель OpenAI GPT-5 з'явиться вже в липні, як стверджують інсайдери. Модель матиме підтримку відео,…

04.06.2025

Безкоштовні користувачі ChatGPT отримали доступ до розширеної функції пам’яті

Функція пам'яті ChatGPT, яка дозволяє звертатися до історії минулих розмов з чат-ботом, тепер стала доступною…

04.06.2025

Розробники Go остаточно відмовились від спроб покращити синтаксис обробки помилок

Після шести років обговорень та сотень пропозицій від ком'юніті команда розробників Go офіційно оголосила, що…

04.06.2025

Оновлення Telegram: з’явились повідомлення адмінам каналів і скорочення голосових повідомлень

Команда Telegram випустила чергове велике оновлення. Адмінам каналів тепер можна надсилати особисті повідомлення, спростилося перемикання…

04.06.2025

У Росії націоналізували одну з найбільших геймдев-компаній. Звинуватили в підтримці ЗСУ

Таганський суд Москви ухвалив рішення про передачу у власність держави 100% уставного капіталу IT-компанії «Леста…

04.06.2025

Adobe випустила бета-версію Photoshop для Android

Компанія Adobe оголосила про випуск бета-версії мобільного додатку Photoshop для платформи Android. Реліз стався через…

03.06.2025