Как построить модель MobileNetV2 для классификации видов цветов с использованием TPU?

Какие виды цветов? Как мы можем определить природу различных цветов? Как мы можем узнать, какой тип цветов нравится большинству людей? По-видимому, модели классификации глубокого обучения помогают нам точно классифицировать виды цветов из разных типов цветов. Свидетельство Как TPU (Tensor Processing Unit) ускоряет стратегию распространения Tensorflow?

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

В конкурсе Kaggle Petals to the Metal — Flower Classification on TPU я выполнил задание по созданию модели машинного обучения для классификации 104 типов цветов по их изображениям. В этом учебном блокноте вы узнаете, как создать классификатор изображений в Keras и обучить его на Tensor Processing Unit (TPU). Тем не менее, у вас будет готовый проект, на основе которого вы сможете построить собственные идеи.

Важные моменты для повышения точности модели классификации

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

  1. Введите размер изображения
  2. Предварительно обученная модель и количество обучаемых параметров конечной модели
  3. Увеличение данных
  4. Методы регуляризации
  5. Использование графика скорости обучения

Шаги, которые необходимо выполнить:

Шаг 0: Импорт библиотек

Мы начинаем эту записную книжку с импорта полезных аналитических библиотек, в которые мы импортируем статистические библиотеки, библиотеки визуализации данных и библиотеки переобучения вместе с Tensorflow и Keras.

Шаг 1: Стратегия распространения

TPU имеет восемь различных ядер, и каждое из этих ядер действует как собственный ускоритель. (TPU — это что-то вроде восьми графических процессоров на одной машине.) Мы сообщаем TensorFlow, как использовать все эти ядра одновременно с помощью стратегии распределения. Не могли бы вы запустить следующую ячейку, чтобы создать стратегию распределения, которую мы позже применим к нашей модели?

Что делает TPUClusterResolver()?

TPU — это ускорители, подключенные к сети, и вы должны сначала найти их в сети. Основная цель TPUSTrategy — содержать необходимый распределенный обучающий код, который будет работать на TPU с их 8 вычислительными ядрами. Всякий раз, когда вы используете TPUStrategy, создавая экземпляр своей модели в рамках стратегии, это создает модель в TPU. Размер модели ограничен только оперативной памятью TPU, а не объемом памяти, доступной на виртуальной машине, на которой выполняется ваш код Python. Для создания и обучения моделей используются обычные API-интерфейсы Keras. Кроме того, прочитайте TPUClusterResolver() и Kaggle TPU Doc.

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

Шаг 2: Загрузка данных конкурса

Получить путь GCS

При использовании с TPU наборы данных необходимо хранить в корзине Google Cloud Storage. Вы можете использовать данные из любой общедоступной корзины GCS, указав путь к ней так же, как если бы вы использовали данные из /Kaggle/input. Следующее позволит получить путь GCS для набора данных этого соревнования.

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

Шаг 3: Загрузка данных (настройка параметров)

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

TPU в основном используется для выделения более крупных моделей с огромными обучающими входами и пакетами, оснащенных до 128 ГБ высокоскоростного распределения памяти. В этой записной книжке мы использовали набор изображений с размером пикселя 512 x 512 пикселей и увидели, как с ним справляется TPU v3–8.

  • num_parallel_reads=AUTO используется для автоматического чтения нескольких файлов.
  • Experimental_deterministic = False, мы использовали «experimental_deterministic» для сохранения порядка данных. Здесь мы отключаем исполнительный ордер, чтобы все равно перемешивать данные.

Настройка дополнительных Данных цветов

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

Увеличение данных

В этом учебном пособии демонстрируется увеличение данных: метод увеличения разнообразия вашего тренировочного набора путем применения случайных (но реалистичных) преобразований, таких как поворот изображения. Подробнее

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

Шаг 4: конвейеры данных

Чтобы ускорить TPU, увеличьте размер пакета

Эти наборы данных являются объектами tf.data.Dataset. Вы можете думать о наборе данных в TensorFlow как о потоке записей данных. Наборы для обучения и проверки представляют собой потоки пар (изображение, метка).

Шаг 5: Исследование данных

Анализ изображения с увеличением или без него

Исходный вариант по сравнению со случайным дополнением

Разблокировать данные обучения

Шаг 6: Пример дополнения данных

Пример дополнения данных V2 (реализация обработки изображений)

Пример расширения данных V3 (реализация обработки изображений)

Шаг 7: определение модели

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

В этом руководстве мы будем использовать модель под названием VGG16, предварительно обученную на ImageNet). Позже вы можете поэкспериментировать с другими моделями, включенными в Keras. Xception будет неплохим выбором.

Созданная нами ранее стратегия распространения содержит менеджер контекста, Strategy.scope. Этот контекстный менеджер сообщает TensorFlow, как разделить работу по обучению между восемью ядрами TPU. При использовании TensorFlow с TPU важно определить модель в контексте strategy.scope().

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

Важно: Как отслеживать скорость обучения во время обучения модели?

Примечание. Стохастический градиентный спуск — это алгоритм оптимизации, который оценивает градиент ошибки для текущего состояния модели, используя примеры из обучающего набора данных, а затем обновляет веса модели с помощью алгоритма обратного распространения ошибок, называемого просто обратным распространением. Количество весов, которое обновляется во время обучения, называется размером шага или скоростью обучения. В частности, скорость обучения — это настраиваемый гиперпараметр, используемый при обучении нейронной сети с небольшим положительным значением, часто в диапазоне от 0,0 до 1,0. Дополнительные сведения см. в статье Джейсона Браунли «Как настроить скорость обучения при обучении нейросетей с глубоким обучением.»

Отслеживание скорости обучения во время обучения NotFoundError: Рабочий контейнер не существует. (Не удалось найти ресурс: worker/_AnonymousVar8064) Обнаружено при выполнении операции с помощью EagerExecutor. Эта ошибка отменяет все будущие операции и отравляет их выходные тензоры.

Настройка пользовательских обратных вызовов

Рассчитайте вес каждого класса цветов

Образец кода ансамблевого обучения

Резюме модели

модель.резюме()

tf.keras.utils.plot_model(model, show_shapes=True)

Шаг 8: Обучение модели

Настройка планировщика скорости обучения

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

if not ensemble_learning_models:
    history = model.fit(
        ds_train,
        validation_data=ds_valid,
        epochs=EPOCHS,
        steps_per_epoch=STEPS_PER_EPOCH,
        callbacks=[lr_callback, checkpoint], 
        class_weight = weight_per_class #tuning11
    )

Визуализация производительности модели

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

  1. Потеря
  2. Метрики
if not ensemble_learning_models:
    display_training_curves_v2( 
        history.history['loss'],
        history.history['val_loss'],
        history.history['lr'],
        'loss',
        211,
    )

    display_training_curves_v2(
        history.history['sparse_categorical_accuracy'],
        history.history['val_sparse_categorical_accuracy'],
        history.history['lr'],
        'accuracy',
        212,
    )

Разверните модель на мобильных устройствах и в Интернете вещей

Чтобы развернуть модели в IoT и мобильных устройствах, нам нужно преобразовать .h5 в Tensorflow lite.

#if ensemble_learning_models:
test_ds = get_test_dataset(ordered=True)
        #best_alpha = 0.35
print('Computing predictions...')
test_images_ds = test_ds.map(lambda image, idnum: image)
probabilities = model.predict(test_images_ds)
predictions = np.argmax(probabilities, axis=-1)
print(predictions)


print('Generating submission.csv file...')
        # Get image ids from test set and convert to unicode
test_ids_ds = test_ds.map(lambda image, idnum: idnum).unbatch()
test_ids = next(iter(test_ids_ds.batch(NUM_TEST_IMAGES))).numpy().astype('U')

        # Write the submission file
np.savetxt('submission.csv', np.rec.fromarrays([test_ids, predictions]), fmt=['%s', '%d'], delimiter=',', header='id,label', comments='')
        # Look at the first few predictions

Отчет о производительности модели

Прогноз моделей

Подчинение

!head submission.csv

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

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

Как построить классификационную модель видов цветов с помощью ансамблевого обучения?

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