CNN (Конволюційні нейронні мережі) — це тип моделі глибокого навчання, спеціально розроблений для обробки даних з решітчастою структурою, таких як зображення. Вони надихнуті людською зоровою корою і справжньою революцією в області розпізнавання зображень, виявлення об'єктів та багатьох інших завдань комп'ютерного зору.
Конволюційний шар: Застосовує фільтри (малі матриці) до вхідного зображення для виділення ознак. Кожен фільтр виявляє специфічні шаблони, такі як краї, кути чи текстури. Виводить карти ознак.
Активаційна функція: Вводить нелінійність у мережу, що допомагає їй навчатися складним патернам. Зазвичай використовувані активаційні функції — ReLU (Rectified Linear Unit).
Пулінг-шар: Зменшує розмірність карт ознак, зберігаючи важливу інформацію. Найпоширенішими методами пулінгу є max pooling та average pooling.
Повністю з'єднаний шар: З'єднує всі нейрони з попереднього шару з кожним нейроном цього шару. Як і в традиційних нейронних мережах, відповідає за класифікацію чи регресію.
Робота конволюційного шару
У серці CNN знаходиться операція конволюції. Це по суті елементне множення фільтра (кернеля) та області вхідного зображення, після чого підсумовуються результати.
Фільтр (Kernel): Мала матриця ваг, яка виявляє специфічні ознаки.
Stride (крок): Кількість пікселів, на яку фільтр переміщається по зображенню горизонтально та вертикально.
Padding (доповнення): Додавання нулів навколо зображення для контролю розміру виходу.
Розуміння пулінгу
Пулінг — це техніка, яка використовується для зменшення розмірності карт ознак при збереженні найважливішої інформації.
ЦНН (Конволюційні нейронні мережі) — це тип моделі глибокого навчання, спеціально розроблений для обробки даних з решітчастою структурою, таких як зображення. Вони надихнуті людською зоровою корою і справжньою революцією в області розпізнавання зображень, виявлення об'єктів та багатьох інших завдань комп'ютерного зору.
Конволюційний шар: Застосовує фільтри (малі матриці) до вхідного зображення для виділення ознак. Кожен фільтр виявляє специфічні шаблони, такі як краї, кути чи текстури. Виводить карти ознак.
Активаційна функція: Вводить нелінійність у мережу, що допомагає їй навчатися складним патернам. Зазвичай використовувані активаційні функції — ReLU (Rectified Linear Unit).
Пулінг-шар: Зменшує розмірність карт ознак, зберігаючи важливу інформацію. Найпоширенішими методами пулінгу є max pooling та average pooling.
Повністю з'єднаний шар: З'єднує всі нейрони з попереднього шару з кожним нейроном цього шару. Як і в традиційних нейронних мережах, відповідає за класифікацію чи регресію.
Робота конволюційного шару
У серці CNN знаходиться операція конволюції. Це по суті елементне множення фільтра (кернеля) та області вхідного зображення, після чого підсумовуються результати.
Фільтр (Kernel): Мала матриця ваг, яка виявляє специфічні ознаки.
Stride (крок): Кількість пікселів, на яку фільтр переміщається по зображенню горизонтально та вертикально.
Padding (доповнення): Додавання нулів навколо зображення для контролю розміру виходу.
Розуміння пулінгу
Пулінг — це техніка, яка використовується для зменшення розмірності карт ознак при збереженні найважливішої інформації.
Реалізація CNN на MNIST
Імпортуємо бібліотеки:
Завантажуємо датасет:
Завантаження: mnist.load_data() надає 60 000 навчальних зображень і 10 000 тестових зображень, кожне з розміром 28x28 пікселів.
Зміна форми: Перетворюємо дані в (28, 28, 1), де 1 представляє один колірний канал (відтінки сірого).
Нормалізація: Ділення на 255.0 масштабує значення пікселів в діапазон [0, 1], покращуючи стабільність навчання.
One-Hot кодування: Перетворює мітки в двійкову матричну форму для категоріальної класифікації, наприклад, цифра 3 представлена як [0,0,0,1,0,0,0,0,0,0].
Визначаємо модель:
Conv2D (1-й шар):
- 32 фільтри з розміром ядра (3, 3) для виявлення ознак, таких як краї.
- activation='relu' додає нелінійність, дозволяючи мережі вчитися складним патернам.
- input_shape=(28, 28, 1) визначає розміри входу для першого шару.
MaxPooling2D: Зменшує розмірність карт ознак, беручи максимальне значення в кожному вікні (2, 2), зменшуючи розміри і обчислювальну складність.
Conv2D (2-й шар): Додає глибший конволюційний шар з 64 фільтрами, дозволяючи моделі виявляти більш складні патерни.
Flatten: Перетворює 2D карти ознак в 1D вектор для подачі в повністю з'єднані шари.
Dense (Повністю з'єднаний шар): 128 нейронів з активацією ReLU для вивчення складних взаємозв'язків між ознаками.
Dropout: Швидкість відключення 0.5 для запобігання перенавчанню шляхом випадкового встановлення 50% нейронів в нуль під час навчання.
Dense (Вихідний шар): 10 нейронів з активацією softmax для виведення ймовірностей класів (по одному для кожної цифри від 0 до 9).
Компіляція та навчання моделі:
epochs=10: Кількість повних проходів через навчальні дані. Ви можете експериментувати з більшою кількістю епох для потенційно кращих результатів.
batch_size=128: Обробляє 128 зображень за раз перед оновленням ваг моделі, балансуючи ефективність пам'яті та стабільність навчання.
validation_split=0.2: 20% навчальних даних зарезервовано для валідації, щоб контролювати перенавчання під час навчання.
verbose=1: Надає детальний висновок під час навчання, показуючи прогрес і втрату після кожної епохи.
Оцінка та прогнози:
Підсумок
Завантаження та попередня обробка: Підготуйте дані (MNIST) за допомогою зміни форми, нормалізації та кодування.
Визначення CNN: Створіть модель CNN з конволюційними, пулінговими та повністю з'єднаними шарами.
Компіляція моделі: Виберіть оптимізатор, функцію втрат і метрики оцінки.
Навчання моделі: Навчіть модель на навчальних даних з валідацією протягом 10 епох.
Оцінка: Перевірте ефективність моделі на тестових даних.
Прогнози: Зробіть прогнози, щоб оцінити точність моделі та її здатність працювати з новими даними.
Перекладено з: Convolutional Neural Network