Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Створення Шару Нейронної Мережі | Основи TensorFlow
Вступ до TensorFlow

Створення Шару Нейронної Мережі

Один шар нейронної мережі

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

y=σ(Wx+b)y=\sigma(W \cdot x + b)

Де:

  • yy: вихід нейрона;
  • WW: матриця, що представляє ваги, пов’язані зі з’єднаннями до нейрона;
  • xx: стовпчикова матриця (або вектор), що представляє вхідні значення до нейрона;
  • bb: скалярне значення;
  • σ\sigma: функція активації, наприклад, сигмоїда, ReLU або softmax.

Для досягнення найкращої продуктивності всі обчислення виконуються з використанням матриць. Ми будемо виконувати це завдання аналогічно.

carousel-imgcarousel-imgcarousel-imgcarousel-imgcarousel-img
Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 3. Розділ 1
single

single

Створення Шару Нейронної Мережі

Свайпніть щоб показати меню

Один шар нейронної мережі

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

y=σ(Wx+b)y=\sigma(W \cdot x + b)

Де:

  • yy: вихід нейрона;
  • WW: матриця, що представляє ваги, пов’язані зі з’єднаннями до нейрона;
  • xx: стовпчикова матриця (або вектор), що представляє вхідні значення до нейрона;
  • bb: скалярне значення;
  • σ\sigma: функція активації, наприклад, сигмоїда, ReLU або softmax.

Для досягнення найкращої продуктивності всі обчислення виконуються з використанням матриць. Ми будемо виконувати це завдання аналогічно.

carousel-imgcarousel-imgcarousel-imgcarousel-imgcarousel-img
Завдання

Проведіть, щоб почати кодувати

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

  1. Визначення розмірностей:

    • Розмірність вхідної матриці I повинна мати перший вимір, що відповідає кількості вибірок у пакеті. Для однієї вибірки з 3 входами її розмір буде 1x3;
    • Матриця ваг W повинна мати стовпці, які відповідають вагам входів для кожного нейрона. Для 2 нейронів з 3 входами очікуваний розмір — 3x2. Якщо це не так, потрібно транспонувати матрицю ваг, щоб отримати потрібний розмір.
  2. Матричне множення:

    • Коли матриці мають правильні розміри, виконайте матричне множення;
    • Нагадаємо, що при матричному множенні вихід отримується як скалярний добуток кожного рядка першої матриці з кожним стовпцем другої матриці. Переконайтеся, що множення виконується у правильному порядку.
  3. Додавання зсуву:

    • Просто виконайте покомпонентне додавання результату матричного множення із зсувом.
  4. Застосування активації:

    • Використайте сигмоїдну функцію активації до результату додавання зсуву, щоб отримати вихід нейрона;
    • У TensorFlow сигмоїдна функція доступна як tf.sigmoid().

Примітка

Наприкінці курсу ми розглянемо реалізацію повної прямої нейронної мережі з використанням TensorFlow. Ця вправа закладає основу для цього.

Рішення

Опис коду
expand arrow

Визначення ваг шару, вхідних даних та зсуву шару

Тут ми визначаємо ваги, вхідні дані та зсув (bias) для шару. Для ваг і зсуву використовуємо tf.Variable(), оскільки це навчальні параметри в нейронних мережах, а для вхідних даних — tf.constant(), оскільки вони залишаються незмінними під час навчання. Встановлено dtype=tf.float64 для найкращої точності.

W = tf.Variable([[0.5, 0.4, 0.7], [0.1, 0.9, 0.5]], dtype=tf.float64)

Це матриця ваг для шару нейронної мережі. Кожен рядок представляє ваги для одного нейрона відносно кожного входу.

I = tf.constant([[0.5, 0.6, 0.1]], dtype=tf.float64)

Це матриця вхідних даних, що представляє один зразок із 3 ознаками.

b = tf.Variable(0.1, dtype=tf.float64)

Це значення зсуву (bias). Це скаляр, який додається до зваженої суми перед передачею через функцію активації.

W = tf.transpose(W)

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

weighted_sum = tf.matmul(I, W)

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

Розглянемо це множення матриць крок за кроком:

Визначення розміру результатної матриці:

Результуюча матриця матиме кількість рядків від першої матриці (матриця I з розміром 1x3) і кількість стовпців від другої матриці (матриця W з розміром 3x2). Отже, результатна матриця матиме розмір 1x2.

Процес множення матриць:

Для першого елемента результатної матриці (назвемо його S[0][0] для "зваженої суми"):

  • Множимо перший елемент першого рядка матриці I на перший елемент першого стовпця матриці W: 0.5 * 0.5 = 0.25;
  • Множимо другий елемент першого рядка матриці I на другий елемент першого стовпця матриці W: 0.6 * 0.4 = 0.24;
  • Множимо третій елемент першого рядка матриці I на третій елемент першого стовпця матриці W: 0.1 * 0.7 = 0.07;
  • Сумуємо ці добутки: 0.25 + 0.24 + 0.07 = 0.56.

Отже, S[0][0] дорівнює 0.56.

Для другого елемента результатної матриці (S[0][1]):

  • Множимо перший елемент першого рядка матриці I на перший елемент другого стовпця матриці W: 0.5 * 0.1 = 0.05;
  • Множимо другий елемент першого рядка матриці I на другий елемент другого стовпця матриці W: 0.6 * 0.9 = 0.54;
  • Множимо третій елемент першого рядка матриці I на третій елемент другого стовпця матриці W: 0.1 * 0.5 = 0.05;
  • Сумуємо ці добутки: 0.05 + 0.54 + 0.05 = 0.64.

Отже, S[0][1] дорівнює 0.64.

Таким чином, результатна матриця S від множення матриці I та матриці W:

[ [0.56, 0.64] ]
biased_sum = weighted_sum + b

Зсув (bias) додається до зваженої суми. Це афінне перетворення, яке зміщує результат для кращого підлаштування під час навчання.

neuron_output = tf.sigmoid(biased_sum)

Сигмоїдна функція стискає значення в діапазоні від 0 до 1, забезпечуючи нормалізований діапазон виходу. Вона часто використовується у задачах бінарної класифікації.

Switch to desktopПерейдіть на комп'ютер для реальної практикиПродовжуйте з того місця, де ви зупинились, використовуючи один з наведених нижче варіантів
Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 3. Розділ 1
single

single

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

some-alt