Краткое изложение того, что я узнал из курса Full Stack Deep Learning

Всем привет, как дела? Сегодня я собираюсь написать статью о том, что я узнал из курсов Full Stack Deep Learning (FSDL) March 2019. Это отличные онлайн-курсы, которые советуют нам делать проекты с использованием Full Stack Deep Learning. Что мне больше всего нравится, так это то, как они учат нас проекту и учат нас не только создавать архитектуру глубокого обучения, но и рассказывать нам о вещах программной инженерии, которые следует учитывать при выполнении проекта о глубоком обучении.

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

В этой статье основное внимание будет уделено инструментам и что делать на каждом этапе полного проекта глубокого обучения в соответствии с курсом FSDL (плюс несколько дополнений об инструментах, которые я знаю ). Будет краткое описание того, что делать на каждом этапе. В этой статье будут показаны только инструменты, которые я увидел в этом курсе. В этой статье мы поговорим о языке программирования Python.

ОБНОВЛЕНИЕ 12 июля 2020 г .: Полный курс глубокого обучения доступен здесь https://course.fullstackdeeplearning.com/. Зацени :).

Контур

  1. Шаги
  2. Планирование и настройка проекта
  3. Сбор данных и маркировка
  4. Разработка кодовой базы
  5. Обучение и отладка
  6. Развертывание
  7. Заключение
  8. Послесловие

Шаги

Вот шаги, которые нам сообщает курс FSDL:

  1. Планирование и настройка проекта
  2. Сбор данных и маркировка
  3. Обучение и отладка
  4. Развертывание и тестирование

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

Планирование и настройка проекта

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

Определите цели проекта

Во-первых, нам нужно определить, что будет делать проект. При выборе того, что делать, нужно учитывать два момента. Это Воздействие и Осуществимость.

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

  1. Где можно воспользоваться дешевым прогнозом?
  2. Где можно автоматизировать сложный программный конвейер, выполняемый вручную?

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

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

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

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

См. Рисунок 4 для получения более подробной информации об оценке осуществимости проекта.

Выберите показатели

Метрика - это измерение конкретной характеристики производительности или эффективности системы.

Поскольку система в машинном обучении лучше всего работает при оптимизации одного числа, нам нужно определить метрику, которая удовлетворяет требованию с одним числом, даже если может быть много метрик, которые следует вычислить. Для проблемы, когда нам нужно использовать множество метрик, нам нужно выбрать формулу для объединения этих метрик. Есть:

  1. Простое среднее / средневзвешенное
  2. Порог n-1 метрики, оцените n-ю метрику
  3. Формула для домена (например, mAP)

Вот несколько примеров того, как объединить две метрики (точность и отзыв):

Выберите базовый уровень

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

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

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

  1. Внешний базовый план, где вы формируете базовый план на основе бизнес-требований или технических требований. Вы также можете использовать опубликованные результаты работы в качестве основы.
  2. Внутренний базовый план. Используйте базовый план со сценарием или создайте простую модель машинного обучения (ML), например, используя стандартное слово на основе функций или простую модель.

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

Настроить кодовую базу

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

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

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

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

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

Вот подэтапы:

Стратегия

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

Глотать

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

Scrapy

Это библиотека для парсинга и сканирования данных Python, которую можно использовать для парсинга и сканирования веб-сайтов. Его можно использовать для сбора таких данных, как изображения и тексты на веб-сайтах. Мы также можем вырезать изображения из Bing, Google или Instagram. Чтобы использовать эту библиотеку, нам нужно изучить учебник, который также доступен на ее веб-сайте. Не волнуйтесь, этому нетрудно научиться.

После того, как мы соберем данные, вам нужно подумать о том, куда отправлять собранные данные. Поскольку вы делаете проект не в одиночку, вам необходимо убедиться, что данные доступны всем. Также нам нужно выбрать формат данных, которые будут сохранены. Ниже представлено решение, когда мы хотим сохранить наши данные в облаке.

Хранилище объектов

Для хранения ваших двоичных данных, таких как изображения и видео, вы можете использовать облачное хранилище, такое как AmazonS3 или GCP, чтобы создать хранилище объектов с API поверх файловой системы. . Мы также можем встроить в сервис управление версиями. См. Их веб-сайт для получения более подробной информации. Вам нужно заплатить, чтобы использовать его (есть также бесплатный план).

База данных

База данных используется для постоянного, быстрого, масштабируемого хранения и поиска структурированных данных. База данных используется для сохранения данных, к которым часто будет осуществляться постоянный доступ, а не двоичных данных. Здесь вы сохраните метаданные (метки, активность пользователей). Есть несколько инструментов, которые вы можете использовать. Рекомендуется использовать PostgresSQl.

Он может хранить структурированную базу данных SQL, а также может использоваться для сохранения неструктурированных данных json. Он все еще активно поддерживается.

Озеро данных

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

Amazon Redshift - одно из канонических решений Data Lake.

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

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

Маркировка данных

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

  1. Нанять аннотаторов самостоятельно
  2. Crowdsource (Механический турок)
  3. Используйте такие компании, как FigureEight, Scale.ai и LabelBox, предоставляющие полный спектр услуг по маркировке данных.

Если вы хотите, чтобы команда комментировала это, вот несколько инструментов, которые вы можете использовать:

Дататурки

Инструмент аннотирования совместной работы в Интернете, Data Turks. Для бесплатного плана он ограничен 10000 аннотациями, и данные должны быть общедоступными. Он предлагает несколько инструментов аннотации для нескольких задач в области NLP (маркировка последовательностей, классификация и т. Д.) И компьютерного зрения (сегментация изображения, ограничивающая рамка изображения, классификация и т. Д.). Курс FSDL использует это как инструмент для маркировки.

doccano

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

CVAT

Автономный инструмент аннотации для задач компьютерного зрения. Он выпущен Intel как Open Source. Он может маркировать ограничивающие рамки и сегменты изображения.

Общедоступные наборы данных

Если вы хотите выполнить поиск в любых общедоступных наборах данных, прочтите эту статью, созданную Стейси Стэнфорд, чтобы узнать любой список общедоступных наборов данных.



Он до сих пор активно обновляется и поддерживается.

Управление версиями данных

Есть уровни того, как делать версии данных:

  1. Уровень 0: без версии. Мы не должны пытаться это сделать. Развертывание требует версионности. Если данные не версируются, развернутые модели также не версируются. Возникнет проблема, если мы будем использовать неверсионный, то есть невозможность вернуться к предыдущему результату.
  2. Уровень 1: версия с помощью снимка. Мы храним все данные, используемые в разных версиях. Можно сказать, что это немного взломано. Нам все еще нужно версия данных так же просто, как версия кода
  3. Уровень 2. Версии данных представляют собой смесь кода и ресурсов. Тяжелые файлы будут храниться на другом сервере (например, Amazon S3), где есть JSON или аналогичный тип в качестве ссылки на соответствующие метаданные. Соответствующие метаданные могут содержать ярлыки, действия пользователя и т. Д. Файл JSON будет версионироваться. Файлы JSON могут стать большими. Чтобы упростить задачу, мы можем использовать git-lfs для его версии. Этот уровень должен быть приемлемым для реализации проекта.
  4. Уровень 3: используйте специализированное программное обеспечение для управления версиями данных. Если вы считаете, что уровня 2 для вашего проекта недостаточно, вы можете это сделать. Одним из инструментов управления версиями данных является DVC.

DVC

DVC создан для того, чтобы сделать модели машинного обучения доступными и воспроизводимыми. Он предназначен для обработки больших файлов, наборов данных, моделей машинного обучения и показателей, а также кода. Это решение для управления версиями моделей машинного обучения с помощью набора данных. Мы можем подключить контроль версий к облачному хранилищу, например Amazon S3 и GCP.

Разработка кодовой базы

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

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

Язык программирования

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

Фреймворк глубокого обучения

Есть несколько вариантов, которые вы можете сделать для платформы глубокого обучения. Самыми популярными фреймворками в Python являются Tensorflow, Keras и PyTorch. Используйте тот, который вам нравится.

Для упрощения отладки вы можете использовать PyTorch в качестве платформы глубокого обучения. Keras также прост в использовании и имеет хороший пользовательский интерфейс. Это оболочка Tensorflow, Theano и других фреймворков глубокого обучения, которая упрощает использование. Tensorflow также можно выбрать, если вам нравится их среда. Tensorflow может быть мудрым решением благодаря поддержке его сообщества и отличным инструментам для развертывания.

Не беспокойтесь о развертывании. Существует программное обеспечение, которое может преобразовать формат модели в другой формат. Например, вы можете преобразовать модель, созданную Pytorch, в Tensorflow. Мы увидим это позже.

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

Контроль версий

Одна из важных вещей при работе над проектом - это контроль версий. Когда мы делаем проект, мы не хотим, чтобы наша кодовая база была не в состоянии переделать, когда кто-то случайно ее испортит. Нам также необходимо отслеживать код при каждом обновлении, чтобы видеть, какие изменения были обновлены кем-то другим. Это будет невозможно, если мы не будем использовать для этого какие-то инструменты. Git - одно из решений.

Хорошо, мы знаем, что контроль версий важен, особенно при совместной работе. В настоящее время git - одно из лучших решений для управления версиями. Его также можно использовать, чтобы поделиться своим кодом с другими людьми в вашей команде. Без этого я не думаю, что вы сможете хорошо сотрудничать с другими участниками проекта.

Есть несколько сервисов, которые используют Git, например GitHub, BitBucket и GitLab.

Проверка кода

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

Структура проекта

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

Одно из найденных мной решений - cookiecutter-data-science. Он дает шаблон, как нам создавать структуру проекта. Здесь также указано, как дать имя созданному файлу и куда вы должны его поместить. Обязательно используйте его, чтобы ваша кодовая база не стала беспорядочной. Рассмотрите возможность чтения веб-сайта, чтобы использовать его.

Интегрированная среда разработки (IDE)

IDE - это один из инструментов, который можно использовать для ускорения написания кода. Он имеет интегрированные инструменты, которые могут быть полезны для разработки. Вы можете использовать несколько IDE:

Пихарм

IDE, выпущенная JetBrains. Эту среду IDE можно использовать не только для выполнения проекта глубокого обучения, но и для других проектов, таких как веб-разработка. Pycharm имеет автоматическое завершение кода, очистку кода, рефакторинг и много интеграций с другими инструментами, что важно при разработке с помощью Python (сначала вам необходимо установить плагин). У него хорошая среда для отладки. Он также может запускать в нем файл записной книжки (.ipynb).

JupyterLab

Jupyter Lab - это одна из IDE, которая представляет собой простые в использовании инструменты интерактивной среды обработки данных, которые можно использовать не только как IDE, но и как инструменты для презентаций. Пользовательский интерфейс (UI) лучше всего использовать в качестве инструментов визуализации или обучающих инструментов. Мы можем оформить документацию в формате markdown, а также вставить картинку в блокнот.

Лично я кодирую исходный код с помощью Pycharm. Когда я создаю несколько руководств для тестирования чего-либо или выполнения исследовательского анализа данных (EDA), я использую для этого Jupyter Lab. Только не помещайте повторно используемый код в файл записной книжки, он плохо воспроизводится.

Непрерывная интеграция

«Эй, какого черта !? Почему я не могу запустить тренировочный процесс на этой версии »- А

«Идк, я просто вставляю свой код и думаю, что он работает на моем ноутбуке ... подождите ... У меня ошибка в этой строке ... Я не скопировал весь свой код в свою реализацию» - B

«Так почему ты толкнул!?!?» - А

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

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

CircleCI - одно из решений для непрерывной интеграции. Он может выполнять модульные и интеграционные тесты. Он может использовать Docker Image (мы погрузимся в него позже) в качестве контейнеризации среды (которую мы должны использовать). Аналогичные инструменты, которые могут это сделать, - это Jenkins и TravisCI.

Вот несколько библиотек, которые вы можете использовать, если хотите протестировать свой код на Python:

pipenv check : сканирует график зависимостей пакетов Python на предмет известных уязвимостей системы безопасности.

pylint: выполняет статический анализ файлов Python и сообщает о проблемах стиля и ошибок.

mypy: выполняет статический анализ файлов Python

bandit: выполняет статический анализ для поиска распространенных уязвимостей безопасности в коде Python.

shellcheck: находит ошибки и потенциальные ошибки в сценариях оболочки (если вы его используете)

pytest: Библиотека тестирования Python для выполнения модульных и интеграционных тестов.

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

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

Пользовательская среда и контейнеризация

"Привет, я протестировал его на своем компьютере, и он работает хорошо"

"Какие ? Нет, чувак, у меня на компьютере не работает? Как, черт возьми, это работает на твоем компьютере !? "

Вы когда-нибудь испытывали такое? У меня есть. Одна из проблем, которые создают эту ситуацию, вызвана отличием вашей рабочей среды от других. Например, вы работаете в Windows, а другой работает в Linux. Различие вашей библиотеки и их библиотеки также может быть причиной проблемы.

Чтобы решить эту проблему, вам нужно явно написать зависимости вашей библиотеки в тексте с именем requirements.txt. Затем запустите виртуальную среду Python, например pipenv.. Это разрешит зависимости библиотек. Тем не менее, он все еще не может решить разницу в среде и ОС команды. Чтобы решить эту проблему, вы можете использовать Docker.

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

Чтобы предоставить общий доступ к контейнеру, сначала нам нужно записать все шаги по созданию среды в Dockerfile, а затем создать DockerImage. Его можно отправить в DockerHub. Затем другой человек может извлечь DockerImage из DockerHub и запустить его со своего компьютера.

Чтобы узнать больше о Docker, есть хорошая статья для начинающих, написанная Прити Кэсиредди.



На рисунке 17 показан пример создания Dockerfile.

Обучение и отладка

Теперь мы находимся на этапе обучения и отладки. На этом этапе вы проводите эксперимент и создаете модель. Вот подэтапы этого шага:

Начать с простого

Используя выбранную вами структуру глубокого обучения, закодируйте нейронную сеть с простой архитектурой (например, нейронную сеть с 1 скрытым слоем). Затем используйте гиперпараметры по умолчанию, такие как отсутствие регуляризации и Adam Optimizer по умолчанию. Не забудьте при необходимости нормализовать ввод. Наконец, используйте простую версию модели (например, небольшой набор данных).

Внедрение и отладка

Для реализации нейронной сети есть несколько приемов, которым следует следовать последовательно.

  1. Запустите модель

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

Исключения, которые часто возникают, следующие:

  1. Несоответствие формы
  2. Проблема с кастингом
  3. Недостаточно памяти

2. Переоснащение одной партии

После этого мы должны переобучить одну партию, чтобы увидеть, может ли модель учиться или нет. Overfit означает, что мы вообще не заботимся о валидации и сосредотачиваемся на том, может ли наша модель учиться в соответствии с нашими потребностями или нет. Делаем это до тех пор, пока качество модели не станет переоборудованным (~ 100%). Вот общие проблемы, которые возникают в этом процессе:

  1. Ошибка увеличивается (может быть вызвано: слишком высокой скоростью обучения, неправильным знаком функции потерь и т. Д.)
  2. Ошибка взрывается / уходит NaN (может быть вызвано: числовыми проблемами, такими как работа журнала, exp или высокая скорость обучения и т. Д.)
  3. Осцилляции ошибок (может быть вызвано: поврежденной меткой данных, слишком высокой скоростью обучения и т. Д.)
  4. Плато ошибок (может быть вызвано слишком низкой скоростью обучения, поврежденной меткой данных и т. Д.)

3. Сравните с известным результатом

Убедившись, что наша модель хорошо обучается, нам нужно сравнить результат с другим известным результатом. Вот иерархия известных результатов:

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

Оценивать

Мы рассчитаем разложение отклонения и отклонения на основе вычисления ошибки с выбранной метрикой нашей текущей лучшей модели. Формула вычисления разложения отклонения и отклонения выглядит следующим образом:

Где:

irreducible error = the error of the baseline
bias = training error - iredducible error
variance = validation error - train error
validation overfitting = test error - validation error

Вот несколько примеров реализации разложения отклонения и отклонения.

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

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

Вот несколько инструментов, которые могут помочь на этом этапе:

Контроль версий

И снова, контроль версий. Да, у нас есть контроль версий для кода и данных, теперь пришло время управлять версиями модели. Вот инструменты, которые можно использовать для управления версиями:

WANDB

Контроль версий результатов модели. У него приятный пользовательский интерфейс и опыт. Затем он может сохранить параметр, используемый в модели, образец результата модели, а также сохранить вес и смещение модели, которая будет версироваться. Кроме того, он может визуализировать результат модели в реальном времени. Более того, мы также можем вернуть модель к предыдущему запуску (также изменить вес модели на этот предыдущий запуск), что упростит воспроизведение моделей. Он может работать в любое время, когда вы захотите. Он также хорошо масштабируется, поскольку может интегрироваться с Kubeflow (Kubernetes для ML, который управляет ресурсами и службами для контейнерных приложений).

Losswise

Это также контроль версий для управления версиями модели. Он также сохраняет в реальном времени результат модели и гиперпараметр, использованный для эксперимента. Он также может оценить, когда модель завершит обучение. Он будет обучать модель каждый раз, когда вы помещаете свой код в репозиторий (в указанной ветке). Также он визуализирует результат работы модели в реальном времени.

Оптимизация гиперпараметров

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

Для Keras DL Framework: Hyperas,

Для Pytorch DL Framework: Hypersearch

Другое: Гиперопт

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

Развертывание

Последний шаг будет этим. Подшаги следующие:

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

После того, как мы убедимся, что модель и система соответствуют требованиям, можно приступить к развертыванию модели. Прежде всего, есть несколько способов развернуть модель. Есть :

  1. Развертывание веб-сервера
  2. Встроенная система и мобильный

Развертывание веб-сервера

Есть несколько стратегий, которые мы можем использовать, если хотим развернуть на веб-сайте. Перед этим нам нужно убедиться, что мы создали RESTful API, который обслуживает прогнозы в ответ на HTTP-запросы (GET, POST, DELETE и т. Д.). Стратегии следующие:

  1. Разверните код в облачных экземплярах. масштабировать, добавляя экземпляры.
  2. Развертывайте код как контейнеры (Docker), масштабируйте с помощью оркестрации. Код приложения упакован в контейнеры Docker. Пример: AWS Fargate.
  3. Разверните код как бессерверную функцию. Код приложения упакован в zip-файлы. Бессерверная функция все сделает. например: мгновенное масштабирование, количество запросов в секунду, балансировка нагрузки и т. д. В отличие от этих двух вышеописанных функций, бессерверная функция платит только за время вычислений, а не за время безотказной работы. Пример: AWS Lambda, Google Cloud Functions и Azure Functions.

Встроенные системы и мобильные устройства

Для развертывания во встроенной системе или на мобильном устройстве мы можем использовать Tensorflow Lite. Он меньше, быстрее и имеет меньше зависимостей, чем Tensorflow, поэтому его можно развернуть во встроенной системе или на мобильном устройстве. К сожалению, у него ограниченный набор операторов.

Также существует инструмент под названием TensorRT. Он оптимизировал механизм вывода, используемый для прогнозирования, тем самым ускорив процесс вывода. Он построен на CUDA. На встраиваемых системах с ним хорошо работает NVIDIA Jetson TX2.

В Apple есть инструмент под названием CoreML, упрощающий интеграцию системы машинного обучения в iPhone. Также существуют аналогичные инструменты под названием MLKit, которые можно использовать для развертывания системы ML на Android.

Обмен

ONNX (Open Neural Network Exchange) - это формат с открытым исходным кодом для моделей глубокого обучения, который может легко преобразовать модель в поддерживаемые платформы глубокого обучения. ONNX поддерживает Tensorflow, Pytorch и Caffe2. Он может смешивать разные фреймворки, так что фреймворки, подходящие для разработки (Pytorch), не должны быть хороши в развертывании и выводе (Tensorflow / Caffe2).

Мониторинг

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

Заключение

В этой статье мы познакомимся с этапами выполнения Full Stack Deep Learning в соответствии с курсом FSDL в марте 2019 года. Во-первых, нам нужно настроить и спланировать проект. На этом этапе нам нужно определить цели, показатели и базовый уровень. Затем мы собираем данные и маркируем их доступными инструментами. При создании базы кода есть несколько инструментов, которые могут поддерживать качество проекта, которые были описаны выше. Затем делаем моделирование с тестированием и отладкой. После того, как модель соответствует требованиям, мы, наконец, знаем шаг и инструменты для развертывания и мониторинга приложения в желаемом интерфейсе.

Послесловие

Вот и все, моя статья об инструментах и ​​шагах, введенных в курс, который я изучил. Почему я пишу эту статью? Я обнаружил, что мой мозг может легко запомнить и помочь мне лучше понять содержание того, что мне нужно, если я это напишу. Более того, в процессе написания у меня есть возможность ознакомиться с содержанием курса. Более того, это может заставить меня поделиться своими знаниями со всеми. Я рада поделиться со всеми чем-нибудь хорошим :).

Следуя этому курсу, я узнаю много нового, особенно об инструментах Deep Learning Stacks. Я также узнаю, как устранять неполадки в модели в Deep Learning, поскольку ее нелегко отлаживать. Он также научил меня инструментам, шагам и приемам выполнения полного цикла глубокого обучения. Подводя итог, это отличные курсы и бесплатный доступ. Поэтому я рекомендую его всем, кто хочет научиться делать проекты в области глубокого обучения.

Если честно, я перепробовал не все инструменты, написанные в этой статье. Инструменты и их описание, представленные в этой статье, взяты из курса FSDL и некоторых источников, которые я читал. Вы можете сказать мне, есть ли какая-то дезинформация, особенно об инструментах.

Таким образом,

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

Увидимся в моей следующей статье.

Источники





от DataKitchen

Https://docs.google.com/presentation/d/1yHLPvPhUs2KGI5ZWo0sU-PKU3GimAk3iTsI38Z-B5Gw/ (презентация на ICLR 2019 о воспроизводимости, сделанная Джоэлем Грусом). Рисунки 14 и 16 взяты из этого источника.



Остальные цифры взяты из этого источника.