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

Что такое предварительно обученная модель?
Простыми словами, предварительно обученная модель — это то, что уже имеет свои веса и смещения, сохраненные для данной модели реализации. Так, например, если вы пытаетесь создать модель для идентификации между кошками и собаками, предварительно обученная модель — это то, что будет ссылаться на нейронную сеть, в которой уже сохранены веса и смещения для данной модели. Проще говоря, предварительно-обученная модель — это модель, созданная кем-то другим для решения аналогичной задачи. Вместо создания модели с нуля для решения аналогичной проблемы вы используете модель, обученную другой проблеме, в качестве отправной точки.

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

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

from os.path import join

image_dir = '../input/dog-breed-identification/train/'
img_paths = [join(image_dir, filename) for filename in 
                           ['0c8fe33bd89646b678f6b2891df8a1c6.jpg',
                            '0c3b282ecbed1ca9eb17de4cb1b6e326.jpg',
                            '04fb4d719e9fe2b6ffe32d9ae7be8a22.jpg',
                            '0e79be614f12deb4f7cae18614b7391b.jpg']]

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

import numpy as np
from tensorflow.python.keras.applications.resnet50 import preprocess_input
from tensorflow.python.keras.preprocessing.image import load_img, img_to_array

image_size = 224

def read_and_prep_images(img_paths, img_height=image_size, img_width=image_size):
    imgs = [load_img(img_path, target_size=(img_height, img_width)) for img_path in img_paths]
    img_array = np.array([img_to_array(img) for img in imgs])
    output = preprocess_input(img_array)
    return(output)

Используя np.array, мы преобразуем его в массив на основе изображений. Результатом здесь будет четырехмерный тензор или массив, но это может немного сбивать с толку, поэтому я просто продолжу. Наконец, мы использовали preprocess_input для предварительной обработки изображения.

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

from tensorflow.python.keras.applications import ResNet50

my_model = ResNet50(weights='../input/resnet50/resnet50_weights_tf_dim_ordering_tf_kernels.h5')
test_data = read_and_prep_images(img_paths)
preds = my_model.predict(test_data)

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

from learntools.deep_learning.decode_predictions import decode_predictions
from IPython.display import Image, display

most_likely_labels = decode_predictions(preds, top=3, class_list_path='../input/resnet50/imagenet_class_index.json')

for i, img_path in enumerate(img_paths):
    display(Image(img_path))
    print(most_likely_labels[i])

Теперь мы сможем визуализировать результаты, полученные из заданных нескольких строк кода. Опять же, я использовал Kaggle в качестве ссылки, и ссылка на то, откуда я узнал об этом, приведена ниже.



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

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

Спасибо за чтение. Продолжай учиться.

Ваше здоровье.