Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Завдання: Створення CNN | Згорткові Нейронні Мережі
Основи комп'ютерного зору

bookЗавдання: Створення CNN

Згорткові нейронні мережі (CNN) широко використовуються для класифікації зображень завдяки здатності виділяти ієрархічні ознаки. У цьому завданні необхідно реалізувати та навчити CNN, подібну до VGG, використовуючи TensorFlow і Keras на наборі даних CIFAR-10. Набір містить 60 000 зображень (32×32×3), що належать до 10 різних класів, включаючи літаки, автомобілі, птахів, котів тощо.

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

CIFAR10

1. Попередня обробка даних для CNN

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

  • Нормалізація: цей метод передбачає масштабування значень пікселів зображень з діапазону від 0 до 255 до діапазону від 0 до 1. Зазвичай реалізується як x_train / 255.0, x_test / 255.0;

  • One-Hot Encoding: мітки часто перетворюються у one-hot вектори для задач класифікації. Це зазвичай виконується за допомогою функції keras.utils.to_categorical, яка трансформує цілі числа міток (наприклад, 0, 1, 2 тощо) у one-hot вектор, такий як [1, 0, 0, 0] для задачі класифікації з 4 класами.

2. Побудова архітектури CNN

Архітектура згорткової нейронної мережі (CNN) складається з декількох шарів, які виконують різні завдання для виділення ознак та здійснення прогнозування. Основні шари CNN можна реалізувати наступним чином:

Згортковий шар (Conv2D)

keras.layers.Conv2D(filters, kernel_size, activation='relu', padding='same', input_shape=(height, width, channels))
Note
Примітка

Параметр input_shape необхідно вказувати лише у вхідному шарі.

Шар підвибірки (MaxPooling2D)

keras.layers.MaxPooling2D(pool_size=(2, 2))

Шар Flatten

keras.layers.Flatten()

Шар Dense

layers.Dense(units=512, activation='relu')
layers.Dense(10, activation='softmax')
Note
Примітка

Останній шар dense зазвичай має кількість юнітів, рівну кількості класів, і використовує softmax-функцію активації для отримання розподілу ймовірностей між класами.

3. Компіляція моделі

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

Оптимізатор (Adam)

Оптимізатор коригує ваги моделі для мінімізації функції втрат. Оптимізатор Adam популярний завдяки своїй ефективності та здатності адаптувати швидкість навчання під час тренування.

keras.optimizers.Adam()

Функція втрат (Categorical Crossentropy)

Для багатокласової класифікації зазвичай використовується функція втрат categorical crossentropy. Це можна реалізувати так:

keras.losses.CategoricalCrossentropy()

Метрики

Для моніторингу якості моделі при класифікаційних завданнях використовуються метрики, такі як точність, precision, recall тощо. Їх можна визначити так:

metrics = [
    keras.metrics.Accuracy(), 
    keras.metrics.Precision(), 
    keras.metrics.Recall()
]

Компіляція

model.compile(optimizer='adam', 
              loss='categorical_crossentropy', # Or keras.losses.CategoricalCrossentropy()
              metrics=metrics)

4. Навчання моделі

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

  • Навчання моделі: метод fit() використовується для навчання моделі. Цей метод приймає навчальні дані, кількість епох і розмір пакета. Також є опціональний параметр розділення для валідації, який дозволяє оцінити якість моделі на невідомих даних під час навчання:
history = model.fit(x_train, y_train, epochs=10, batch_size=32, validation_split=0.2)
  • Розмір пакета та епохи: розмір пакета визначає кількість зразків, що обробляються перед оновленням ваг моделі, а кількість епох означає, скільки разів увесь набір даних проходить через модель.

5. Оцінювання

Звіт про класифікацію

sklearn.metrics.classification_report() порівнює істинні та передбачені значення з тестового набору даних. Містить точність, повноту та F1-метрику для кожного класу. Однак методи потребують лише мітки класів, тому не забудьте перетворити їх назад з векторів ([0,0,1,0] -> 2):

y_pred = model.predict(x_test)
y_pred_classes = np.argmax(y_pred,axis = 1)
y_test_classes = np.argmax(y_test, axis = 1)

report = classification_report(y_test_classes, y_pred_classes, target_names=class_names)
print(report)

Оцінка

Після навчання модель оцінюється на тестовому наборі даних для визначення її здатності до узагальнення. Оцінювання надає метрики, які були зазначені у методі .compile(). Оцінювання виконується за допомогою .evaluate():

results = model.evaluate(x_test, y_test, verbose=2, return_dict=True)

Матриця плутанини

Для отримання додаткової інформації про роботу моделі можна візуалізувати матрицю плутанини, яка показує істинно позитивні, хибно позитивні, істинно негативні та хибно негативні передбачення для кожного класу. Матриця плутанини може бути обчислена за допомогою TensorFlow:

confusion_mtx = tf.math.confusion_matrix(y_test_classes, y_pred_classes)

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

plt.figure(figsize=(12, 9))
c = sns.heatmap(confusion_mtx, annot=True, fmt='g')
c.set(xticklabels=class_names, yticklabels=class_names)

plt.show()

1. Завантаження та попередня обробка датасету

  • Імпорт датасету CIFAR-10 з Keras;
  • Нормалізація значень пікселів до діапазону [0,1] для кращої збіжності;
  • Перетворення міток класів у формат one-hot encoded для категоріальної класифікації.

2. Визначення моделі CNN

Реалізація архітектури CNN, подібної до VGG, з такими основними шарами: VGG like architecture

Згорткові шари:

  • Розмір ядра: 3×3;
  • Функція активації: ReLU;
  • Заповнення: 'same'.

Шари пулінгу:

  • Тип пулінгу: max pooling;
  • Розмір пулінгу: 2×2.

Шари Dropout (запобігання перенавчанню шляхом випадкового вимкнення нейронів):

  • Рівень Dropout: 25%.

Шар Flatten — перетворення 2D-карт ознак у 1D-вектор для класифікації.

Повнозв'язні шари — щільні шари для фінальної класифікації з вихідним шаром relu або softmax.

Компіляція моделі з використанням:

  • Adam optimizer (для ефективного навчання);
  • Функція втрат Categorical cross-entropy (для багатокласової класифікації);
  • Метрика Accuracy metric для оцінки якості (класи збалансовані, можна додати інші метрики самостійно).

3. Навчання моделі

  • Вказати параметри epochs та batch_size для навчання (наприклад, epochs=20, batch_size=64);
  • Вказати параметр validation_split, щоб визначити відсоток тренувальних даних, які стануть валідаційними для відстеження якості моделі на невідомих зображеннях;
  • Зберегти історію навчання для візуалізації тенденцій точності та втрат.

4. Оцінка та візуалізація результатів

  • Перевірити модель на тестових даних CIFAR-10 та вивести точність;
  • Побудувати графік втрат на тренуванні та валідації для перевірки перенавчання;
  • Побудувати графік точності на тренуванні та валідації для контролю прогресу навчання.

COLAB CNN PROJECT

question-icon

Введіть частини ключа (Ви отримали їх після виконання проєкту)

1.  2.  3.  4.  5.
Все було зрозуміло?

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

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

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

Запитати АІ

expand

Запитати АІ

ChatGPT

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

Awesome!

Completion rate improved to 3.45

bookЗавдання: Створення CNN

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

Згорткові нейронні мережі (CNN) широко використовуються для класифікації зображень завдяки здатності виділяти ієрархічні ознаки. У цьому завданні необхідно реалізувати та навчити CNN, подібну до VGG, використовуючи TensorFlow і Keras на наборі даних CIFAR-10. Набір містить 60 000 зображень (32×32×3), що належать до 10 різних класів, включаючи літаки, автомобілі, птахів, котів тощо.

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

CIFAR10

1. Попередня обробка даних для CNN

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

  • Нормалізація: цей метод передбачає масштабування значень пікселів зображень з діапазону від 0 до 255 до діапазону від 0 до 1. Зазвичай реалізується як x_train / 255.0, x_test / 255.0;

  • One-Hot Encoding: мітки часто перетворюються у one-hot вектори для задач класифікації. Це зазвичай виконується за допомогою функції keras.utils.to_categorical, яка трансформує цілі числа міток (наприклад, 0, 1, 2 тощо) у one-hot вектор, такий як [1, 0, 0, 0] для задачі класифікації з 4 класами.

2. Побудова архітектури CNN

Архітектура згорткової нейронної мережі (CNN) складається з декількох шарів, які виконують різні завдання для виділення ознак та здійснення прогнозування. Основні шари CNN можна реалізувати наступним чином:

Згортковий шар (Conv2D)

keras.layers.Conv2D(filters, kernel_size, activation='relu', padding='same', input_shape=(height, width, channels))
Note
Примітка

Параметр input_shape необхідно вказувати лише у вхідному шарі.

Шар підвибірки (MaxPooling2D)

keras.layers.MaxPooling2D(pool_size=(2, 2))

Шар Flatten

keras.layers.Flatten()

Шар Dense

layers.Dense(units=512, activation='relu')
layers.Dense(10, activation='softmax')
Note
Примітка

Останній шар dense зазвичай має кількість юнітів, рівну кількості класів, і використовує softmax-функцію активації для отримання розподілу ймовірностей між класами.

3. Компіляція моделі

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

Оптимізатор (Adam)

Оптимізатор коригує ваги моделі для мінімізації функції втрат. Оптимізатор Adam популярний завдяки своїй ефективності та здатності адаптувати швидкість навчання під час тренування.

keras.optimizers.Adam()

Функція втрат (Categorical Crossentropy)

Для багатокласової класифікації зазвичай використовується функція втрат categorical crossentropy. Це можна реалізувати так:

keras.losses.CategoricalCrossentropy()

Метрики

Для моніторингу якості моделі при класифікаційних завданнях використовуються метрики, такі як точність, precision, recall тощо. Їх можна визначити так:

metrics = [
    keras.metrics.Accuracy(), 
    keras.metrics.Precision(), 
    keras.metrics.Recall()
]

Компіляція

model.compile(optimizer='adam', 
              loss='categorical_crossentropy', # Or keras.losses.CategoricalCrossentropy()
              metrics=metrics)

4. Навчання моделі

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

  • Навчання моделі: метод fit() використовується для навчання моделі. Цей метод приймає навчальні дані, кількість епох і розмір пакета. Також є опціональний параметр розділення для валідації, який дозволяє оцінити якість моделі на невідомих даних під час навчання:
history = model.fit(x_train, y_train, epochs=10, batch_size=32, validation_split=0.2)
  • Розмір пакета та епохи: розмір пакета визначає кількість зразків, що обробляються перед оновленням ваг моделі, а кількість епох означає, скільки разів увесь набір даних проходить через модель.

5. Оцінювання

Звіт про класифікацію

sklearn.metrics.classification_report() порівнює істинні та передбачені значення з тестового набору даних. Містить точність, повноту та F1-метрику для кожного класу. Однак методи потребують лише мітки класів, тому не забудьте перетворити їх назад з векторів ([0,0,1,0] -> 2):

y_pred = model.predict(x_test)
y_pred_classes = np.argmax(y_pred,axis = 1)
y_test_classes = np.argmax(y_test, axis = 1)

report = classification_report(y_test_classes, y_pred_classes, target_names=class_names)
print(report)

Оцінка

Після навчання модель оцінюється на тестовому наборі даних для визначення її здатності до узагальнення. Оцінювання надає метрики, які були зазначені у методі .compile(). Оцінювання виконується за допомогою .evaluate():

results = model.evaluate(x_test, y_test, verbose=2, return_dict=True)

Матриця плутанини

Для отримання додаткової інформації про роботу моделі можна візуалізувати матрицю плутанини, яка показує істинно позитивні, хибно позитивні, істинно негативні та хибно негативні передбачення для кожного класу. Матриця плутанини може бути обчислена за допомогою TensorFlow:

confusion_mtx = tf.math.confusion_matrix(y_test_classes, y_pred_classes)

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

plt.figure(figsize=(12, 9))
c = sns.heatmap(confusion_mtx, annot=True, fmt='g')
c.set(xticklabels=class_names, yticklabels=class_names)

plt.show()

1. Завантаження та попередня обробка датасету

  • Імпорт датасету CIFAR-10 з Keras;
  • Нормалізація значень пікселів до діапазону [0,1] для кращої збіжності;
  • Перетворення міток класів у формат one-hot encoded для категоріальної класифікації.

2. Визначення моделі CNN

Реалізація архітектури CNN, подібної до VGG, з такими основними шарами: VGG like architecture

Згорткові шари:

  • Розмір ядра: 3×3;
  • Функція активації: ReLU;
  • Заповнення: 'same'.

Шари пулінгу:

  • Тип пулінгу: max pooling;
  • Розмір пулінгу: 2×2.

Шари Dropout (запобігання перенавчанню шляхом випадкового вимкнення нейронів):

  • Рівень Dropout: 25%.

Шар Flatten — перетворення 2D-карт ознак у 1D-вектор для класифікації.

Повнозв'язні шари — щільні шари для фінальної класифікації з вихідним шаром relu або softmax.

Компіляція моделі з використанням:

  • Adam optimizer (для ефективного навчання);
  • Функція втрат Categorical cross-entropy (для багатокласової класифікації);
  • Метрика Accuracy metric для оцінки якості (класи збалансовані, можна додати інші метрики самостійно).

3. Навчання моделі

  • Вказати параметри epochs та batch_size для навчання (наприклад, epochs=20, batch_size=64);
  • Вказати параметр validation_split, щоб визначити відсоток тренувальних даних, які стануть валідаційними для відстеження якості моделі на невідомих зображеннях;
  • Зберегти історію навчання для візуалізації тенденцій точності та втрат.

4. Оцінка та візуалізація результатів

  • Перевірити модель на тестових даних CIFAR-10 та вивести точність;
  • Побудувати графік втрат на тренуванні та валідації для перевірки перенавчання;
  • Побудувати графік точності на тренуванні та валідації для контролю прогресу навчання.

COLAB CNN PROJECT

question-icon

Введіть частини ключа (Ви отримали їх після виконання проєкту)

1.  2.  3.  4.  5.
Все було зрозуміло?

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

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

Секція 3. Розділ 7
some-alt