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

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))
Параметр 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')
Останній шар 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, з такими основними шарами:
Згорткові шари:
- Розмір ядра:
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 та вивести точність;
- Побудувати графік втрат на тренуванні та валідації для перевірки перенавчання;
- Побудувати графік точності на тренуванні та валідації для контролю прогресу навчання.
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
Awesome!
Completion rate improved to 3.45
Завдання: Створення CNN
Свайпніть щоб показати меню
Згорткові нейронні мережі (CNN) широко використовуються для класифікації зображень завдяки здатності виділяти ієрархічні ознаки. У цьому завданні необхідно реалізувати та навчити CNN, подібну до VGG, використовуючи TensorFlow і Keras на наборі даних CIFAR-10
. Набір містить 60 000 зображень (32×32×3
), що належать до 10 різних класів, включаючи літаки, автомобілі, птахів, котів тощо.
Цей проєкт проведе вас через завантаження набору даних, попередню обробку зображень, визначення моделі CNN, її навчання та оцінювання ефективності.

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))
Параметр 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')
Останній шар 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, з такими основними шарами:
Згорткові шари:
- Розмір ядра:
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 та вивести точність;
- Побудувати графік втрат на тренуванні та валідації для перевірки перенавчання;
- Побудувати графік точності на тренуванні та валідації для контролю прогресу навчання.
Дякуємо за ваш відгук!