Введение

Искусственный интеллект и машинное обучение произвели революцию в области вычислений. Это привело к разработке моделей, управляемых данными. Модель, управляемая данными, учится на прошлых/исторических данных, а затем распознает закономерности в данных. Модель получает знания, которые она использует для прогнозирования будущих результатов. Модель машинного обучения может быстро учиться на данных и со временем повышать точность своих прогнозов.

Многие ученые стремятся построить более сложные модели, которые дают наиболее точные результаты в будущем. Потребность в этих моделях привела к внедрению моделей глубокого обучения.

Модели глубокого обучения используют искусственную нейронную сеть для построения сложных моделей. Модели глубокого обучения могут решать сложные задачи, такие как беспилотные автомобили, компьютерное зрение, обработка естественного языка и классификация изображений.

Модели глубокого обучения строятся с использованием различных типов искусственных нейронных сетей, таких как Рекуррентные нейронные сети, Сверточные нейронные сети, Глубокие нейронные сети, Сети долговременной памяти, Генеративно-состязательные сети и Глубокие убеждения. Сети», которые применяются для решения конкретных задач.

В этом руководстве вы построите модель глубокого обучения с помощью сверточной нейронной сети ResNet-50. ResNet-50 — это предварительно обученная сверточная нейронная сеть для классификации изображений и компьютерного зрения. ResNet-50 — это остаточная сеть с 50 слоями, наложенными друг на друга, чтобы сформировать окончательную нейронную сеть. 50 слоев включают 48 слоев свертки, 1 слой среднего пула и 1 слой максимального пула.

ResNet-50 обучается на большом наборе изображений из базы данных ImageNet. Вы можете легко импортировать предварительно обученный ResNet-50 из Keras и применить его для создания пользовательской модели классификации изображений. В этом руководстве вы импортируете сверточную нейронную сеть ResNet-50 из Keras. Затем вы примените его для построения модели классификации изображений цветов. Использование предварительно обученной нейронной сети работает быстрее. Это экономит время на построении всей сверточной нейронной сети с нуля.

Предпосылки

Чтобы начать работу с этим учебным пособием, убедитесь, что вы знакомы со следующим:

- Убедитесь, что вы знаете программирование на Python.

- Убедитесь, что вы используете блокнот Google Colab для запуска кода Python. Google Colab является мощным, поскольку он использует облачные графические процессоры Google для запуска модели глубокого обучения. Когда у вас есть блокнот Google Colab, давайте начнем настройку нашего проекта.

Настройка проекта

Для построения модели глубокого обучения нам потребуются TensorFlow и Keras. Мы будем запускать Tensorflow в бэкенде при построении модели классификации цветов. Затем мы импортируем Keras из TensorFlow и используем его для инициализации нашей модели глубокого обучения. Также будем импортировать сеть ResNet-50 из Keras API. Мы импортируем эти библиотеки следующим образом:

import tensorflow as tf
from tensorflow import keras

Давайте также импортируем слои Keras из Keras. Вы добавите пользовательские входные и выходные слои Keras для точной настройки сети ResNet-50:

from tensorflow.keras import layers

Скачивание набора данных

Перед созданием модели глубокого обучения вы загрузите набор данных и сохраните его в Google Colab. Чтобы загрузить набор данных, примените следующий код в Google Code:

flowers_url = "https://storage.googleapis.com/download.tensorflow.org/example_images/flower_photos.tgz"

Код загрузит набор данных в сжатом формате. Затем вам нужно извлечь набор данных и сохранить его в каталог данных в Google Colab:

import pathlib
flowers_data = tf.keras.utils.get_file('flower_photos', origin=flowers_url, untar=True)
flowers_data = pathlib.Path(flowers_data)

Код сохранит несжатые данные в Google Colab в каталоге с именем `flowers_data`. Давайте напечатаем `flowers_data`, чтобы увидеть данные в Google Colab:

print(flowers_data)

Приведенный выше код выводит следующее:

/root/.keras/datasets/flower_photos

Отображение изображений

Загруженный набор данных состоит из пяти категорий изображений цветов: подсолнухи, тюльпаны, одуванчики, розы и ромашки. Чтобы отобразить некоторые изображения подсолнуха, используйте следующий код:

all_sunflowers = list(flowers_data.glob('sunflowers/*'))

Чтобы распечатать и отобразить одно из изображений роз в Google Colab, используйте этот код:

import PIL
print(all_sunflowers[1])
PIL.Image.open(str(all_sunflowers[1]))

Код отображает следующее изображение:

Следующим шагом является предварительная обработка нашего набора данных изображений в формате, который модель глубокого обучения может легко понять и изучить.

Предварительная обработка набора данных изображения

Для начала вы установите высоту и ширину изображения следующим образом:

height,width=180,180

Из приведенного выше кода у нас есть размеры изображения 180 на 180 пикселей. Следующим шагом является установка размера пакета, который модель глубокого обучения будет использовать во время каждого цикла обучения:

training_batch_size=32

Следующим шагом является разделение загруженного набора данных изображений на наборы для обучения и проверки. Чтобы получить тренировочный набор, запустите следующий код в Google Colab:

train_set = tf.keras.preprocessing.image_dataset_from_directory(
flowers_data,
validation_split=0.2,
subset="training",
seed=123,
image_size=(height,width),
batch_size=training_batch_size)

В приведенном выше фрагменте кода мы используем `validation_split=0.2` для разделения исходного набора данных. Это означает, что 80 % исходного набора данных изображений будут использоваться для обучения модели глубокого обучения, а 20 % — для проверки модели.

Чтобы увидеть все категории цветов, найденные в обучающем наборе, используйте следующий код:

image_cat = train_set.class_names
print(image_cat)

Приведенный выше код обеспечивает следующий вывод:

['daisy', 'dandelion', 'roses', 'sunflowers', 'tulips']

Чтобы получить набор проверки, запустите следующий код в Google Colab:

validation_set = tf.keras.preprocessing.image_dataset_from_directory(
flowers_data,
validation_split=0.2,
subset="validation",
seed=123,
image_size=(height, width),
batch_size=training_batch_size)

После завершения предварительной обработки набора данных следующим шагом является построение модели глубокого обучения.

Построение модели глубокого обучения

Для начала вы инициализируете модель TensorFlow Sequential. Это позволит нам добавить пользовательский входной и выходной слой Keras в предварительно обученную сеть ResNet-50. Пользовательские слои точно настроят сеть ResNet-50 для выполнения классификации изображений.

dnn_model = Sequential()

После инициализации последовательной модели следующим шагом будет импорт предварительно обученной сети ResNet-50. Вы импортируете эту предварительно обученную сеть, используя следующий фрагмент кода:

imported_model= tf.keras.applications.ResNet50(include_top=False,
input_shape=(180,180,3),
pooling='avg',classes=5,
weights='imagenet')
for layer in imported_model.layers:
layer.trainable=False

Фрагмент кода загрузит предварительно обученную сеть ResNet-50. Мы также установили следующие параметры:

  • `include_top=False`: это гарантирует, что мы можем добавить пользовательский входной и выходной слой Keras в предварительно обученную сеть ResNet-50.
  • `pooling=’avg`: при построении модели глубокого обучения будет использоваться метод среднего объединения.
  • `classes=5`: он показывает, что набор данных изображений имеет пять категорий цветов.
  • `weights=’imagenet`: сеть ResNet-50 будет использовать веса imagenet для классификации.
  • `layer.trainable=False`: это гарантирует, что параметры и веса ResNet-50 не будут обучаться повторно, чтобы ускорить процесс обучения.

Точная настройка импортированной предварительно обученной сети ResNet-50

Вы добавите пользовательский входной и выходной слой Keras для точной настройки импортированной предварительно обученной сети ResNet-50. Пользовательский входной и выходной слой Keras позволит нашей окончательной модели глубокого обучения понимать наши данные и давать желаемые результаты. Давайте сначала импортируем слои Keras следующим образом:

from tensorflow.python.keras.layers import Dense, Flatten

Мы импортировали слои «Dense» и «Flatten», которые будут точно настраивать и настраивать сеть ResNet-50. Вы добавите пользовательские слои, используя следующий фрагмент кода:

dnn_model.add(imported_model)
dnn_model.add(Flatten())
dnn_model.add(Dense(512, activation='relu'))
dnn_model.add(Dense(5, activation='softmax'))

Код добавит `imported_model` в качестве первого слоя. Он также добавит слой Flatten и слой Dense с 512 нейронами. Наконец, он добавляет выходной слой «Dense» с пятью нейронами. Выходной слой имеет пять нейронов, потому что набор данных изображения имеет пять категорий цветов. Этот слой также использует функцию активации softmax, поскольку набор данных изображения содержит более двух категорий цветов.

Получение сводки по модели

Чтобы получить сводку модели, используйте этот код:

dnn_model.summary()

Код дает следующий вывод:

Вывод показывает, что мы строим последовательную модель Tensflow. Он также показывает все обучаемые параметры и все необучаемые параметры, импортированные из ResNet-50.

Компиляция модели глубокого обучения

При компиляции модели глубокого обучения вы установите «оптимизатор», «потери» и «метрики» модели. Для этой модели:

  1. Вы будете импортировать и использовать Адама в качестве оптимизатора модели. Это улучшит производительность и точность модели глубокого обучения на этапе обучения. Он также обрабатывает и отлаживает ошибки, которые может иметь модель глубокого обучения на этапе обучения.
  2. Параметр «потери» модели вычисляет все ошибки, с которыми сталкиваются модели глубокого обучения на этапе обучения. Вы будете использовать `sparse_categorical_crossentropy` в качестве значения параметра `loss` модели.
  3. Параметр «метрики» модели оценивает производительность модели глубокого обучения. Он получает оценку точности модели после каждого тренировочного цикла (эпохи). Вы будете использовать «точность» в качестве значения параметра «метрики» модели.

Чтобы скомпилировать модель глубокого обучения, используйте этот код:

from tensorflow.keras.optimizers import Adam
dnn_model.compile(optimizer=Adam(lr=0.001),loss='sparse_categorical_crossentropy',metrics=['accuracy'])

Последний шаг — встроить скомпилированную модель глубокого обучения в набор для обучения и проверки. Набор данных будет обучать и оценивать производительность модели. Со временем модель глубокого обучения будет учиться на наборе данных и получать знания, которые затем будут использоваться для прогнозирования.

Подбор модели глубокого обучения

Чтобы поместить скомпилированную модель глубокого обучения в набор для обучения и проверки, используйте этот код:

python
history = dnn_model.fit(
train_set,
validation_data=validation_set,
epochs=10
)

Модель будет учиться на наборе данных изображений в течение десяти циклов обучения (эпох) и выдаст следующий результат:

Из приведенного выше вывода видно, что показатель точности модели глубокого обучения со временем увеличивается по мере увеличения количества эпох. Через десять эпох модель глубокого обучения готова, и вы можете использовать ее для прогнозирования.

Создание прогнозов с помощью обученной глубокой нейронной сети

Вы будете использовать окончательную модель глубокого обучения, чтобы предсказать изображение цветка. Он классифицирует изображение цветка в одну из пяти категорий цветов.

Сначала вы импортируете библиотеку OpenCV. Он предварительно обработает выбранное изображение цветка, чтобы убедиться, что оно имеет те же размеры, что и изображения, на которых обучалась модель глубокого обучения.

import cv2
image=cv2.imread(str(all_sunflowers[1]))
image_resized= cv2.resize(image, (height, width))
image=np.expand_dims(image_resized,axis=0)
print(image.shape)

После предварительной обработки выбранное изображение подсолнуха будет иметь размер 180 на 180 пикселей:

(1, 180, 180, 3)

Теперь вы можете применить следующий код для модели, чтобы предсказать это изображение:

model_pred=dnn_model.predict(sample_image)

Чтобы напечатать предсказанную категорию, примените этот код:

predicted_class=image_cat[np.argmax(model_pred)]
print("The predicted category is", predicted_class)

Фрагмент кода отображает следующий вывод:

The predicted category is sunflowers

На основе этого вывода модель глубокого обучения классифицировала категорию изображения цветка как подсолнухи. Это точный прогноз, который показывает, что вы успешно внедрили модель глубокого обучения.

Заключение

Следуя этому руководству, вы узнали, как построить модель глубокого обучения с использованием Keras и ResNet-50. Вы использовали возможности предварительно обученной сети ResNet-50 и точно настроили ее для решения задачи классификации изображений. Вы также узнали, как модели глубокого обучения создают сложные модели и приложения.

В этом руководстве показано, как построить простую модель классификации изображений. Вы можете попробовать запустить код в Google Colab самостоятельно и получить такую ​​же модель. Вы также можете получить доступ ко всему коду Python для этой модели классификации изображений здесь.

Чтобы получить больше информации о глубоком обучении, начните с этого руководства, а затем улучшите свои знания. С практикой вы будете создавать более сложные модели глубокого обучения, способные решать сложные задачи. Приятного обучения!

Если вам понравился этот урок, давайте подключимся в LinkedIn.