single
Створення Шару Нейронної Мережі
Свайпніть щоб показати меню
Один шар нейронної мережі
У базовій прямій нейронній мережі вихід нейрона в шарі обчислюється як зважена сума його вхідних значень, пропущена через функцію активації. Це можна представити так:
y=σ(W⋅x+b)
Де:
- y: вихід нейрона;
- W: матриця, що представляє ваги, пов’язані зі з’єднаннями до нейрона;
- x: стовпчикова матриця (або вектор), що представляє вхідні значення до нейрона;
- b: скалярне значення;
- σ: функція активації, наприклад, сигмоїда, ReLU або softmax.
Для досягнення найкращої продуктивності всі обчислення виконуються з використанням матриць. Ми будемо виконувати це завдання аналогічно.





Проведіть, щоб почати кодувати
Маючи ваги, вхідні дані та зсув для шару з одним нейроном, обчисліть його вихід за допомогою матричного множення та сигмоїдної активації. Розглядається шар з 3 входами та 2 нейронами, який приймає одну вибірку в пакеті.
-
Визначення розмірностей:
- Розмірність вхідної матриці
Iповинна мати перший вимір, що відповідає кількості вибірок у пакеті. Для однієї вибірки з 3 входами її розмір буде1x3; - Матриця ваг
Wповинна мати стовпці, які відповідають вагам входів для кожного нейрона. Для 2 нейронів з 3 входами очікуваний розмір —3x2. Якщо це не так, потрібно транспонувати матрицю ваг, щоб отримати потрібний розмір.
- Розмірність вхідної матриці
-
Матричне множення:
- Коли матриці мають правильні розміри, виконайте матричне множення;
- Нагадаємо, що при матричному множенні вихід отримується як скалярний добуток кожного рядка першої матриці з кожним стовпцем другої матриці. Переконайтеся, що множення виконується у правильному порядку.
-
Додавання зсуву:
- Просто виконайте покомпонентне додавання результату матричного множення із зсувом.
-
Застосування активації:
- Використайте сигмоїдну функцію активації до результату додавання зсуву, щоб отримати вихід нейрона;
- У TensorFlow сигмоїдна функція доступна як
tf.sigmoid().
Примітка
Наприкінці курсу ми розглянемо реалізацію повної прямої нейронної мережі з використанням TensorFlow. Ця вправа закладає основу для цього.
Рішення
Визначення ваг шару, вхідних даних та зсуву шару
Тут ми визначаємо ваги, вхідні дані та зсув (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, забезпечуючи нормалізований діапазон виходу. Вона часто використовується у задачах бінарної класифікації.
Дякуємо за ваш відгук!
single
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат