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

В этой разработке модели машинного обучения мы будем использовать очень мощную платформу/инструменты на базе Microsoft Azure, Azure Machine Learning Services. Это облачная платформа для проектирования, обучения, развертывания и управления моделями машинного обучения. Он предоставляет набор инструментов, с помощью которого вы можете управлять всеми этапами разработки модели машинного обучения и контролировать их.

Получите встроенную поддержку инструментов и сред с открытым исходным кодом для обучения моделей машинного обучения и создания логических выводов. Используйте знакомые платформы, такие как PyTorch, TensorFlow и scikit-learn, или открытый и совместимый формат ONNX. Выберите инструменты разработки, которые лучше всего соответствуют вашим потребностям, включая популярные IDE, блокноты Jupyter и интерфейсы командной строки — или такие языки, как Python и R. Используйте среду выполнения ONNX для оптимизации и ускорения логического вывода в облаке и на периферийных устройствах.

Нас очень заинтересовал очень мощный SDK для Python, предоставленный Microsoft, в котором специалисты по данным и разработчики искусственного интеллекта создают и запускают рабочие процессы машинного обучения с помощью службы машинного обучения Azure. Вы можете взаимодействовать с сервисом в любой среде Python, включая Jupyter Notebooks, Visual Studio Code или в вашей любимой Python IDE.

Мы можем кодировать локально, используя нашу любимую IDE, вызывая SDK API для управления (создания, изменения или удаления) всеми объектами, участвующими в процессе (рабочее пространство, эксперимент, «запуск» или обучение) без необходимости ручного взаимодействия. с порталом Azure. Затем во время обучения мы можем визуализировать потери и показатели, определенные в модели, на портале Azure, что помогает нам контролировать и группировать всю информацию в одной точке или контейнере.

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

Доступ к коду можно получить в этом репозитории Github.

Прежде всего, загрузите библиотеку или SDK

Создайте рабочую область машинного обучения Azure и экспериментируйте

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

Переменные subscription_id, resource_group и workspace_name должны быть установлены в соответствии с нашей конфигурацией или предпочтениями Azure. Теперь ws — наш основной объект, где будут выполняться все операции.

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

Создание и определение вычислительного ресурса

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

При необходимости мы можем выполнить нашу модель на кластере ВМ. Чтобы создать кластер, необходимо указать конфигурацию вычислений, в которой указывается тип используемой машины и поведение масштабируемости. Затем вы выбираете имя для кластера, уникальное в рабочей области, которое можно использовать для обращения к кластеру позже. Существует множество типов вычислительных ресурсов: «STANDARD_DS12_V2», «STANDARD_D4_V2» с некоторым объемом оперативной памяти и графических или центральных процессоров и т. д.

Хранилище данных, где хранятся данные

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

Хранилище данных — это место, где могут храниться данные, которые затем становятся доступными для эксперимента (объекта «Выполнение» в нем) посредством подключения или копирования данных в целевой объект вычислений. Хранилище данных может поддерживаться хранилищем BLOB-объектов Azure или общим файловым ресурсом Azure (ADLS будет поддерживаться в будущем). Для простой обработки данных каждая рабочая область предоставляет хранилище данных по умолчанию, которое можно использовать, если данные еще не находятся в хранилище BLOB-объектов или общей папке. Мы будем использовать это хранилище данных по умолчанию.

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

Создайте оценщик TensorFlow

Затем мы создаем объект оценки azureml.train.dnn.TensorFlow, используем цель вычислений и передаем точку монтирования хранилища данных обучающему коду в качестве параметра. Оценщик TensorFlow предоставляет простой способ запуска обучающего задания TensorFlow на целевом объекте вычислений. Он автоматически предоставит образ докера с установленным TensorFlow. В этом случае мы добавляем пакет keras (очевидно, для фреймворка Keras) и пакет matplotlib для построения диаграммы «Потери и точность» и записываем ее в историю выполнения.

Наконец, мы можем отправить оценщик в эксперимент Azure ML, чтобы начать выполнение. Теперь все ресурсы будут запущены, поэтому в первый раз для начала обучения потребуется несколько минут (5–10 мин).

По мере выполнения Run он будет проходить следующие этапы:

Подготовка: создается образ Docker, соответствующий среде Python, указанной оценщиком TensorFlow, и он будет загружен в Реестр контейнеров Azure рабочей области. Этот шаг будет выполняться только один раз для каждой среды Python — затем контейнер будет кэшироваться для последующих запусков. Создание и загрузка изображения занимает около 5 минут. Во время подготовки задания журналы передаются в журнал выполнения, и их можно просматривать для отслеживания хода создания образа.

Масштабирование: если вычислительные ресурсы необходимо масштабировать (т. е. вычислительному кластеру требуется больше узлов для выполнения запуска, чем доступно в настоящее время), кластер попытается увеличить масштаб, чтобы создать необходимое количество узлов. доступный. Масштабирование обычно занимает около 5 минут.

Выполняется: все скрипты в папке скриптов загружаются в целевой объект вычислений, хранилища данных монтируются/копируются и выполняется entry_script. Пока задание выполняется, stdout и папка ./logs передаются в историю выполнения, и их можно просматривать для отслеживания хода выполнения.

Постобработка: папка запуска ./outputs копируется в историю выполнения.

Существует несколько способов проверить ход выполнения задания. Мы можем использовать виджет блокнота Jupyter:

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

Нам нужно установить некоторые параметры, и они анализируются и извлекаются с помощью объекта парсера Python:

Затем мы загружаем данные, разделяем их на наборы для обучения и оценки, создаем Keras CNN с 3 сверточными слоями с пакетной нормализацией и активацией RELU и 2 плотными слоями с активацией RELU. Наконец, мы включаем плотный слой с функцией активации softmax с выходным размером, равным количеству предсказываемых классов. Мы применяем некоторое дополнение данных, чтобы предотвратить переоснащение, подгонку и оценку модели. Вы можете просмотреть и получить все подробности в файлах .py, включенных в папку speech_cnn в репозитории.

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

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

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

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

Гитхаб-репозиторий.