- 1 Введение
- 1.1 Что такое конволюционные нейронные сети (CNN)?
- 1.2 Задача классификации
- 1.3 Постановка задачи
- 1.4 Подход
- 2 Код
- 2.1 Импорт пакетов для работы с данными
- 2.2 Загрузка данных
- 2.3 Построение CNN
- 2.4 Обучение CNN
- 2.4 Оценка производительности CNN
- 2.5 Сохранение модели
- 2.6 Загрузка модели
- 2.7 Создание образца представления
- Похожие статьи
- Ссылки
- 1 Введение
- 1.1 Что такое конволюционные нейронные сети (CNN)?
- 1.2 Задача классификации
- 1.3 Постановка задачи
- 1.4 Подход
- 2 Код
- 2.1 Импорт пакетов для работы с данными
- 2.2 Загрузка данных
- 2.3 Построение CNN
- 2.4 Обучение CNN
- 2.4 Оценка производительности CNN
- 2.5 Сохранение модели
- 2.6 Загрузка модели
- 2.7 Создание образца представления
- Похожие статьи
- Ссылки
1 Введение
1.1 Что такое конволюционные нейронные сети (CNN)?
Конволюционные нейронные сети (CNN) — это класс искусственных нейронных сетей, который стал доминирующим в различных задачах компьютерного зрения и вызывает интерес в различных областях.
Сверточная нейронная сеть состоит из нескольких строительных блоков, таких как слои свертки, слои объединения и полностью связанные слои, и предназначена для автоматического и адаптивного обучения пространственной иерархии признаков с помощью алгоритма обратного распространения.
CNN хорошо работает в задачах компьютерного зрения, таких как классификация изображений, обнаружение объектов, распознавание образов и т.д. Другие нейронные сети, используемые для решения подобных задач, включают рекуррентные нейронные сети (RNN), долговременную память (LSTM), искусственные нейронные сети (ANN) и т.д.,
1.2 Задача классификации
В этой статье я попытаюсь решить задачу HP Unlocked. Это задача номер четыре.
Вы можете получить данные с указанного выше сайта, или вы также можете форкнуть файлы из моего репозитория GitHub — Unlocked_Challenge_4 и начать работать над ней напрямую.
1.3 Постановка задачи
Это задача бинарной классификации. Задача состоит в том, чтобы построить модель машинного обучения для классификации изображений «La Eterna», вида цветка.
1.4 Подход
Я буду использовать модель CNN для получения базовой оценки. По первоначальному анализу, набор данных довольно мал для задачи глубокого обучения. Я проведу некоторые дополнения изображений, чтобы увеличить набор данных.
В следующих статьях я также рассмотрю настройку гиперпараметров и трансферное обучение с использованием VGG19.
2 Код
Для выполнения кода я использовал локальный экземпляр Jupyter lab. Окончательный вариант кода можно найти здесь.
2.1 Импорт пакетов для работы с данными
import pandas as pd
import numpy as np
import os
import cv2
import matplotlib.pyplot as plt
import warnings
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
from tensorflow.keras.preprocessing.image import ImageDataGenerator
import keras_tuner as kt
print("Num GPUs Available: ", len(tf.config.list_physical_devices('GPU')))
# Set the seed value for experiment reproducibility.
seed = 1842
tf.random.set_seed(seed)
np.random.seed(seed)
# Turn off warnings for cleaner looking notebook
warnings.simplefilter('ignore')
2.2 Загрузка данных
#define image dataset
# Data Augmentation
image_generator = ImageDataGenerator(
rescale=1/255,
rotation_range=10, # rotation
width_shift_range=0.2, # horizontal shift
height_shift_range=0.2, # vertical shift
zoom_range=0.2, # zoom
horizontal_flip=True, # horizontal flip
brightness_range=[0.2,1.2],# brightness
validation_split=0.2,)
#Train & Validation Split
train_dataset = image_generator.flow_from_directory(batch_size=32,
directory='data_cleaned/Train',
shuffle=True,
target_size=(224, 224),
subset="training",
class_mode='categorical')
validation_dataset = image_generator.flow_from_directory(batch_size=32,
directory='data_cleaned/Train',
shuffle=True,
target_size=(224, 224),
subset="validation",
class_mode='categorical')
#Organize data for our predictions
image_generator_submission = ImageDataGenerator(rescale=1/255)
submission = image_generator_submission.flow_from_directory(
directory='data_cleaned/scraped_images',
shuffle=False,
target_size=(224, 224),
class_mode=None)
2.3 Построение CNN
Не беспокойтесь о том, как создается сеть. Мы можем использовать настройку гиперпараметров, чтобы лучше настроить слои и получить стабильную сеть. Я расскажу об этом в следующей статье. Если вы хотите узнать об этом больше, ознакомьтесь с документацией Keras.
Убедитесь, что вы не перепутали формы входа и выхода. Здесь входная форма имеет вид (224, 224, 3). Это означает, что высота, ширина и каналы изображения равны соответственно 224, 224 и 3 (3 — это красный, зеленый и синий каналы цветного изображения).
model = keras.models.Sequential([
keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape = [224, 224,3]),
keras.layers.MaxPooling2D(),
keras.layers.Conv2D(64, (2, 2), activation='relu'),
keras.layers.MaxPooling2D(),
keras.layers.Conv2D(64, (2, 2), activation='relu'),
keras.layers.Flatten(),
keras.layers.Dense(100, activation='relu'),
keras.layers.Dense(2, activation ='softmax')
])
Теперь мы можем скомпилировать подготовленную модель. Обратите внимание, что мы также используем обратный вызов, чтобы остановить обучение раньше времени. В данном случае обратный вызов будет срабатывать, если потери при валидации остаются неизменными или увеличиваются в течение более 3 эпох.
model.compile(optimizer='adam',
loss = 'binary_crossentropy',
metrics=['accuracy'])
callback = keras.callbacks.EarlyStopping(monitor='val_loss',
patience=3,
restore_best_weights=True)
2.4 Обучение CNN
model.fit(train_dataset, epochs=20, validation_data=validation_dataset, callbacks=callback)
2.4 Оценка производительности CNN
loss, accuracy = model.evaluate(validation_dataset)
print("Loss: ", loss)
print("Accuracy: ", accuracy)
2.5 Сохранение модели
model.save('cnn-model')
2.6 Загрузка модели
model = keras.models.load_model('cnn-model')
2.7 Создание образца представления
onlyfiles = [f.split('.')[0] for f in os.listdir(os.path.join('data_cleaned/scraped_images/image_files')) if os.path.isfile(os.path.join(os.path.join('data_cleaned/scraped_images/image_files'), f))]
submission_df = pd.DataFrame(onlyfiles, columns =['images'])
submission_df[['la_eterna', 'other_flower']] = model.predict(submission)
submission_df.head()
submission_df.to_csv('submission_file.csv', index = False)
Похожие статьи
- Установка TensorFlow на M1 MacBook Air с GPU (Metal)
- Запуск Ubuntu на M1 Macbook Air с помощью UTM
- Анализ и классификация набора данных Mushroom в python
- Как открыть sublime text из командной строки windows
Ссылки
- https://www.tensorflow.org/tutorials/images/data_augmentation
- https://www.analyticsvidhya.com/blog/2020/02/learn-image-classification-cnn-convolutional-neural-networks-3-datasets/
- https://www.youtube.com/watch?v=l-NAT4H4384