Это часть серии записей блога, связанных с автоматизированным созданием моделей машинного обучения и наборов данных, используемых для обучения нейронных сетей. Если вам интересна предыстория этой истории, или то, как происходило внедрение, какой код Python стоял за этим, вы можете прокрутить нижнюю часть статьи, чтобы получить ссылки на предыдущие записи блога. Вы также можете перейти на страницу Use SERP Data to Build Machine Learning Models, чтобы получить четкое представление о том, какие автоматизированные модели машинного обучения вы можете создать, или как улучшить свой проект Data Science.
В предыдущие недели я сделал учебник о том, как автоматизировать создание алгоритмов глубокого обучения для обучения моделей машинного обучения с помощью автоматизированного API. На этой неделе я расскажу о пошаговом создании нейронных сетей в понятной форме с визуализацией.
Подходит ли Python для машинного обучения?
Python поддерживает широко используемые библиотеки машинного обучения, такие как Keras, Pytorch, Tensorflow, Tensorflow 2, Scikit-Learn, а также поддерживающие Data-Science Python библиотеки Scipy, Numpy, Matplotlib, Pandas и др. От создания нейронных сетей до визуализации процесса машинного обучения, Python для машинного обучения является одним из основных для изучающих машинное обучение благодаря множеству открытого кода, учебников и реальных приложений.
Кроме того, Python является отличным языком программирования для создания простых или масштабных API. Разнообразие библиотек Python также создает уникальную возможность познакомиться с различными отраслями информатики. Специалист по анализу данных, программист, занимающийся программированием на Python, ученики, начинающие с нуля, могут встретиться в одном проекте и обмениваться различными метриками и информацией без особых проблем.
В рамках этого руководства мы обучаем алгоритм машинного обучения классификатора изображений. Для новых читателей мы использовали SerpApi’s Google Images Scraper API для получения изображений американских видов собак с 500 шириной и 500 высотой, а также задали параметр dog chips
, который позволяет выбрать только изображения собак. Использование данных SERP — отличный способ сократить количество времени, которое вы тратите на предварительную обработку, и делать прогнозы с меньшим количеством шума. Вы можете зарегистрироваться, чтобы получить бесплатные кредиты.
Сложно ли машинное обучение на Python?
Python — это просто. Машинное обучение может стать проще с Python. Относительно говоря, модели машинного обучения легче разрабатывать на Python. Он также поддерживает богатые библиотеки с алгоритмами машинного обучения для обработки естественного языка, визуализации данных, SERP и предварительной обработки.
Чтобы упростить работу с Python, на этой неделе я создал пошаговую форму, которая поможет вам создать нейронные сети для машинного обучения. На мой взгляд, у Python есть потенциал, чтобы вылечить то, что трудно в машинном обучении. Если мы позволим человеку, интересующемуся машинным обучением, создавать алгоритмы в удобном для него виде, более легком для восприятия, с ограниченным количеством деталей на каждом этапе создания алгоритма глубокого обучения; а также предоставим возможность терпеть неудачи и добиваться успеха, проводить перекрестные проверки в масштабе, это неизбежно приведет к лучшему пониманию машинного обучения. Конечно, мне придется добавить различные типы методов для ввода деталей процесса обучения. Лично для меня, чтобы обучить классификатор, я бы не хотел делать пять шагов один за другим для создания линейной регрессии. Я бы предпочел JSON, которым я могу манипулировать, или форму, где каждый гиперпараметр линейной регрессии находится в одном месте, чтобы я мог легко заполнить его, как в SerpApi’s Playground:
Я только учусь и не являюсь экспертом в области машинного обучения. Но это мое предпочтение. Без лишних слов, давайте погрузимся в форму.
Модель машинного обучения
Я создал возможность использовать либо ранее настроенный алгоритм машинного обучения по имени его класса в Python, либо создать собственный алгоритм, создавая нейронные сети слой за слоем. Если вы выберете имя класса, создание слоев не отобразится. Поэтому мы пока выберем пользовательский метод:
Строительные блоки нейронной сети
Вы можете выбрать тип слоя для вашей нейронной сети, определить гиперпараметры и решить, хотите ли вы добавить новый слой или нет. Пока доступны только те слои, которые мы будем использовать в этом учебнике. Но это должно дать хорошее представление о том, как работают алгоритмы машинного обучения.
В будущем я планирую поддерживать типы слоев и гиперпараметры, необходимые для создания популярных алгоритмов машинного обучения, таких как KNN (K-Nearest Neighbor), K-Means Clustering, SVM (Support Vector Machines) или Hierarchical Clustering, Random Forest, Decision Trees, Logistic Regression и различных других алгоритмов классификации, а также алгоритмов регрессии.
Вы также можете использовать предопределенные ключевые слова, такие как auto
для получения размера in-channels или in-features слоя, или использовать n_labels
для использования размера метки. Особенно при работе с Dimensionality Reduction, когда попытка вычислить некоторые гиперпараметры вручную может создать помехи. На данный момент поддерживаются не все вычисления. Но это должно дать четкое представление о том, как уменьшить сложность для пользователя при работе с машинным обучением.
Критерий
До сих пор я поддерживал только функцию CrossEntropyLoss библиотеки Python Pytorch без каких-либо изменений. Я назвал это имя Criterion, чтобы представить более широкое понятие. Критерий обычно относится к функции, которая отвечает за поиск минимальных потерь, которые можно получить в процессе обучения Machine Learning. Функция ошибки относится к функции, ответственной за отображение разницы между прогнозом модели машинного обучения и реальным значением. Целевая функция — это функция, которую вы хотите максимизировать или минимизировать для получения лучшего прогноза. Функция стоимости, или функция потерь, относится к минимизации объективной функции, что означает минимизацию потерь между прогнозом искусственного интеллекта и реальным примером. Для всех этих алгоритмов, отвечающих за оценку успешности процесса обучения, мы будем использовать название Критерий.
Оптимизатор
Библиотека Python Pytorch, которую мы используем для этого процесса машинного обучения, поддерживает множество типов оптимизаторов с большими возможностями настройки. Оптимизатор относится к функции, отвечающей за регулировку весов между нейронными сетями для того, чтобы найти хорошее соответствие для предсказания. Скорость обучения — это важный гиперпараметр оптимизатора, который жизненно важен для процесса обучения Machine Learning и отвечает за то, насколько большой скачок в обучении должен быть сделан при каждом предсказании. Если он слишком высок, результаты будут странными и неправильными. Часто при высокой скорости обучения вы можете получить менее 50 процентов правильных предсказаний в ситуации бинарного выбора. Если скорость обучения слишком низкая, процесс обучения не достигнет абсолютного минимума критерия. Это приведет к плохо обученным нейронным сетям. Момент здесь представляет собой импульс изменения скорости обучения при правильном предсказании.
Предварительная обработка изображений
Хотя нам не требуется изменение размера, библиотека Python PIL должна изменить размер изображения (до собственного размера) перед выполнением анти-алиасинга. Вы можете записывать массивы в текстовое поле, и они сами преобразуются в массив в словаре Python, отвечающем за обучение в фоновом режиме. Передискретизация изображений в RGB может помочь нам использовать RGBA (Red-green-blue-alpha, где alpha представляет собой непрозрачность) изображения в RGB, чтобы уменьшить их векторную размерность до 3, чтобы использовать их. Эти операции могут существенно изменить полезность набора данных или процент его использования. Вы также можете полностью пропустить операции с изображениями.
Преобразования
Преобразования — это часть, в которой вы настраиваете тензоризацию изображений, необходимую для вычислений Machine Learning. До сих пор я поддерживал только функции toTensor и Normalize библиотеки Python’s Pytorch. Как и при работе с изображениями, вы можете использовать массив в текстовом формате для среднего и среднего значения процесса нормализации. Вы также можете выполнять преобразования на объекте в процессе обучения Machine Learning для получения лучшего представления.
Имена меток
В предыдущие недели мы реализовали способ автоматического сбора предварительно обработанных и помеченных данных с помощью SerpApi’s Google Images Scraper API, используя Python библиотеку SerpApi под названием Google Search Results in Python. Мы хранили собранные изображения в локальном сервере N1QL Couchbase Server для реализации будущих асинхронных процессов. N1QL — это хорошая модель данных, позволяющая использовать возможности SQL в форме JSON. Мы храним изображения с именами меток на сервере и получаем их автоматически всякий раз, когда происходит процесс обучения или тестирования машинного обучения. На данный момент имена меток представляют собой запросы, сделанные на SerpApi’s Google Images Scraper API, по одному запросу на каждую строку. В будущем мы добавим автоматический сбор недостающих запросов в наборе данных перед обучением.
Размер партии, эпохи, имя модели
Остальная часть этой формы для создания словаря Python с нашими командами состоит из размера партии, количества эпох и имени модели. Размер партии показывает, сколько изображений должно быть получено во время каждого сеанса обучения Deep Learning. Количество эпох показывает, сколько раз должен повторяться каждый отдельный процесс обучения Machine Learning. Имя модели — это имя файла, в котором будет сохранена обученная модель машинного обучения. Поскольку мы используем библиотеку Python Pytorch, она будет сохранена в формате .pt.
Асинхронное машинное обучение
Как только мы нажимаем кнопку Begin Training, мы отправляем асинхронный запрос на конечную точку train с желаемыми параметрами обучения Machine Learning, и обучение Machine Learning происходит на фоне FastAPI с использованием Python. Тем временем мы можем создать еще одну модель Deep Learning, и как только эта модель будет готова, автоматически будет создан файл модели с нужным именем.
Это полезно для сравнения изменений параметров модели машинного обучения, чтобы получить представление о том, каким должен быть оптимальный процесс обучения машинного обучения. В последующие недели мы добавим новую страницу с живой визуализацией данных процесса обучения и перекрестной валидацией для разных процессов обучения на одном графике. Эти графики также будут включать метрики различных процессов вместе с набором данных для обучения.
Для этого я использовал фоновые процессы FastAPI в Python:
@app.post("/train/")
async def train(tc: TrainCommands, background_tasks: BackgroundTasks):
def background_training(tc):
if tc.model['name'] != None and tc.model['name'] != "":
model = eval(tc.model['name'])
else:
model = CustomModel
trainer = Train(tc, model, CustomImageDataLoader, CustomImageDataset, ImagesDataBase)
trainer.train()
model = None
try:
torch.cuda.empty_cache()
except:
pass
background_tasks.add_task(background_training, tc)
return {"status": "Success"}
Я не буду делиться подробными кодами фактической страницы и тем, как она сделана. Причина проста. Я не использовал React и продолжил использовать жестко закодированный метод. Я не думаю, что это будет хорошим примером здесь. Он станет публичным после того, как я выпущу библиотеку с открытым исходным кодом.
Заключение
Я благодарен читателю за внимание, а также Brilliant People of SerpApi за то, что сделали возможным написание этой статьи, и автору кодепена, который я использовал для демонстрации на этой неделе. Я также буду благодарен, если читатель будет следить за серией статей на любой платформе, которую он нашел (Linkedin, Medium, Tealfeed и т.д.). В последующие недели мы обсудим визуализацию процессов обучения и тестирования, хранение учебных данных Machine Learning на сервере хранения, использование технологий Unsupervised Learning, Reinforcement Learning, а также дальнейшее освоение моделей Supervised Learning, возможность использования наборов данных Kaggle.
Ссылки на предыдущие записи блога |
---|
Как обучить масштабируемый классификатор с помощью FastAPI и SerpApi? |
Автоматическое обучение с помощью FastAPI, Pytorch и SerpApi |
Создание базы данных N1QL с метками изображений с помощью Couchbase, FastAPI и SerpApi |
Использование настраиваемого словаря для автоматического обучения сети с помощью FastApi, PyTorch и SerpApi |
Расширение возможностей обучения с помощью данных SERP |
Автоматическое обучение в масштабе |
ML-модель с автоматическим созданием |
Машинное обучение на Python |