single
Реалізація Нейронної Мережі
Свайпніть щоб показати меню
Огляд базової нейронної мережі
Ви вже досягли етапу, коли володієте необхідними знаннями TensorFlow для самостійного створення нейронних мереж. Хоча більшість реальних нейронних мереж є складними і зазвичай створюються за допомогою високорівневих бібліотек, таких як Keras, ми побудуємо базову мережу, використовуючи фундаментальні інструменти TensorFlow. Такий підхід надає практичний досвід роботи з низькорівневою маніпуляцією тензорами, що допомагає зрозуміти внутрішні процеси.
У попередніх курсах, таких як Вступ до нейронних мереж, ви можете згадати, скільки часу та зусиль вимагало створення навіть простої нейронної мережі, опрацьовуючи кожен нейрон окремо.
TensorFlow значно спрощує цей процес. Використовуючи тензори, можна інкапсулювати складні обчислення, зменшуючи потребу у складному кодуванні. Основне завдання — налаштувати послідовний ланцюжок тензорних операцій.
Коротке нагадування про кроки для запуску процесу навчання нейронної мережі:
Підготовка даних та створення моделі
Початковий етап навчання нейронної мережі включає підготовку даних, що охоплює як вхідні, так і вихідні дані, на яких мережа буде навчатися. Додатково встановлюються гіперпараметри моделі — це параметри, які залишаються незмінними протягом усього процесу навчання. Ваги ініціалізуються, зазвичай вибираються з нормального розподілу, а зміщення часто встановлюються в нуль.
Пряме поширення (Forward Propagation)
Під час прямого поширення кожен шар мережі зазвичай виконує такі кроки:
- Множення вхідних даних шару на його ваги.
- Додавання зміщення до результату.
- Застосування функції активації до цієї суми.





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



Цикл навчання
Для ефективного навчання нейронної мережі кроки тренування повторюються багаторазово з відстеженням продуктивності моделі. Ідеально, якщо втрата зменшується з кожною епохою.
Проведіть, щоб почати кодувати
Створення нейронної мережі для прогнозування результатів операції XOR. Мережа повинна містити 2 вхідних нейрони, прихований шар із 2 нейронами та 1 вихідний нейрон.
- Почніть із ініціалізації початкових ваг і зміщень. Ваги слід ініціалізувати за допомогою нормального розподілу, а всі зміщення — ініціалізувати нулями. Використовуйте гіперпараметри
input_size,hidden_sizeтаoutput_sizeдля визначення відповідних форм цих тензорів. - Використайте декоратор функції для перетворення функції
train_step()у граф TensorFlow. - Виконайте пряме поширення через прихований і вихідний шари мережі. Використовуйте сигмоїдальну функцію активації.
- Визначте градієнти, щоб зрозуміти, як кожна вага і зміщення впливають на функцію втрат. Переконайтеся, що градієнти обчислюються у правильному порядку, відповідно до імен вихідних змінних.
- Оновіть ваги і зміщення на основі їх відповідних градієнтів. Враховуйте
learning_rateу цьому процесі коригування для контролю величини кожного оновлення.
Рішення
Підготовка даних
X_data: це вхідні дані для функції XOR. Це масив NumPy розміром (4, 2), який представляє чотири можливі комбінації вхідних даних XOR: (0,0), (0,1), (1,0) та (1,1);Y_data: це цільовий вихід для кожної комбінації вхідних даних уX_data. Це також масив NumPy, але розміром (4, 1), який представляє вихід XOR для кожної пари вхідних даних.
Параметри мережі
input_size: розмір вхідного шару, встановлений на 2, що відповідає двом вхідним вузлам (для двох входів функції XOR);hidden_size: розмір прихованого шару, також встановлений на 2. Це вибір певною мірою довільний, але достатній для навчання функції XOR;output_size: розмір вихідного шару, встановлений на 1, що відповідає одному вихідному вузлу (результат операції XOR);learning_rate: це швидкість навчання для алгоритму оптимізації, яка визначає, наскільки сильно коригуються ваги під час навчання.
Ваги та зсуви
W1таb1: ваги (W1) та зсуви (b1) для з'єднань від вхідного шару до прихованого.W1— це змінна TensorFlow, ініціалізована випадковими значеннями, розміром(input_size, hidden_size), тобто(2, 2).b1— це змінна TensorFlow, ініціалізована нулями, розміром(hidden_size), тобто(2);W2таb2: ваги (W2) та зсуви (b2) для з'єднань від прихованого шару до вихідного.W2ініціалізується випадковими значеннями, розміром(hidden_size, output_size), тобто(2, 1).b2ініціалізується нулями, розміром(output_size), тобто(1).
Функція навчання
train_step(): основна функція навчання. Використовуєtf.GradientTape()для автоматичного диференціювання. На прямому проході обчислює активації прихованого шару (a1) та передбачення виходу (Y_pred). Втрата обчислюється як середньоквадратична помилка міжY_predтаY. Далі функція обчислює градієнти та оновлює ваги й зсуви;tf.sigmoid(): використовується сигмоїдна активаційна функція, яка перетворює вхід у значення від0до1. Застосовується як для прихованого, так і для вихідного шару.
Цикл навчання
- Мережу навчають протягом
2500епох. На кожній епосі викликається функціяtrain_step(), і ваги оновлюються. Втрата виводиться кожні500епох для моніторингу прогресу навчання.
Висновок
Оскільки функція XOR є відносно простою задачею, на цьому етапі немає потреби у використанні складних технік, таких як налаштування гіперпараметрів, розділення датасету чи побудова складних конвеєрів даних. Ця вправа — лише крок до створення більш складних нейронних мереж для реальних застосувань.
Опанування цих основ є критично важливим перед переходом до складніших технік побудови нейронних мереж у наступних курсах, де буде використовуватися бібліотека Keras та розглядатимуться методи підвищення якості моделей за допомогою розширених можливостей TensorFlow.
Дякуємо за ваш відгук!
single
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат