Мой самый первый практический проект по машинному обучению — и что я из него узнал?

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

Он был проведен в субботу в 4 часа утра там, где я живу — план состоял в том, чтобы лечь пораньше и явиться на 2,5-часовую сессию, а затем сразу же отоспаться — но тот факт, что мой мозг не мог после этого отключиться, является свидетельством насколько веселой и по-настоящему «пробуждающей» была сессия ;)

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

Этот пост разбит на 3 основные части: предыстория проекта, фрагменты реальной практики (ура, коды!) и мои личные размышления об общем опыте.

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

1. Предыстория: нежное введение в контролируемое обучение

Конкретным направлением нашего проекта в тот день было создание веб-приложения для классификации изображений.

Конечная цель, как следует из названия, состоит в том, чтобы иметь веб-приложение, в котором модель может распознавать или классифицировать изображение, которое мы хотим, чтобы оно могло классифицировать, используя около 30 помеченных примеров или образцов фотографий объекта классификации (или «X »), чтобы тренировать его. Он просто должен ответить «Это изображение X или нет?».

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

В целях практики я выбрал свои часы Fitbit Charge 3 в качестве объекта классификации и сделал 30 их фотографий, пытаясь запечатлеть все разные хорошие и плохие ракурсы и детали, как было предложено. Затем мне также нужно было выбрать около 30 фотографий неклассифицируемого объекта (я случайным образом выбрал горы, собак, автомобили — если подумать, я бы выбрал другие объекты, которые могут быть похожи на часы Fitbit. и посмотрите, улучшит ли это его точность), чтобы по существу научить машину: «Пожалуйста, узнайте, что это часы Fitbit — вот изображения Fitbit, аааа… это не Fitbit — вот изображения». .

Если вам интересно узнать больше, Дэвид Фумо проделал отличную работу, объясняя различные типы машинного обучения.

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

Как только у нас будет готово около 60 образцов фотографий (~ 30 фотографий для каждой категории классификации по сравнению с категорией, не относящейся к категории), наступает время выполнения.

  1. Прежде всего, нам, очевидно, нужно было создать нашу модель, загрузив образцы фотографий в Обучаемую машину (это был самый простой шаг, и по мере нашего продвижения он становился все сложнее!) и экспортировать модель для нашего использования. Эта модель основана на TensorFlow, библиотеке, созданной Google, что упрощает ее для начинающих, таких как я.
  2. Далее самое интересное! Мы обратились к Repl.it, чтобы создать наше веб-приложение с помощью Flask. Требовалось большое внимание к деталям, т. е. к строчным и прописным буквам (см. ниже, как они чувствительны к регистру!), скобкам и отступам. Я больше чем когда-либо хотел, чтобы у нас была какая-то функция автозамены — поговорите о том, чтобы идти в ногу с классом, одновременно (и с тревогой) отслеживая свои собственные ошибки.
  3. Все еще на Repl.it — я опущу детали, но мы сделали кучу кодов, например, чтобы убедиться, что веб-приложение принимает изображения только в определенном формате, применить нашу собственную модель, создать интерпретатор и другую важную работу, которую необходимо выполнить. сделано, прежде чем, наконец, запустить код!
  4. Теперь момент, которого мы ждали. Довольно много участников класса успешно запустили свои веб-приложения, но я столкнулся с некоторыми ошибками и не смог их исправить из-за ограниченного времени, которое у нас было во время урока. Я знал, что моя самая последняя ошибка, которую нужно исправить, каким-то образом связана с моим импортом Flask (в правой нижней части страницы есть панель окна, которая сообщила мне об этом, см. ниже):

Я снова заснул после сеанса и вернулся к нему позже тем же вечером с более свежей парой глаз, действительно, что не может исправить хороший сон? ;) Я был, мягко говоря, в восторге, когда увидел превью моего «собственного» первого веб-приложения, всплывающее на правой панели!

Вы можете щелкнуть здесь, чтобы проверить это самостоятельно. Вы можете загрузить изображение случайных часов Fitbit или любого другого объекта, чтобы увидеть, насколько хорошо они работают! :)

3. Извлеченные уроки: помимо технических аспектов

2,5-часовая сессия была компактной и динамичной, это было правильное количество задач и времени для новичков. У них было несколько готовых ассистентов в чате, так что в любой момент вы могли задать им любые вопросы, которые у вас могут возникнуть, и получить быстрый ответ. Кристал терпеливо вел всех от начала до конца, команда работала вместе, чтобы убедиться, что никто не остался позади, что я очень ценю.

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

За последние несколько дней после сеанса я провел с собой мини-сеанс размышлений и пришел к трем выводам:

  1. Просто начните. Я не решался присоединиться, когда впервые увидел сообщение на своей странице в LinkedIn, думая, что за ним будет слишком сложно следить. Но, с другой стороны, я считал, что это хорошая возможность поработать над мини-проектом независимо от результата. Я все равно зарегистрировался, думая, что ничего не теряю. До сих пор я очень удивлен, что мне удалось прийти в 4 утра, хотя я спал всего 3 часа!
  2. Начните с малого. Для новичка в науке о данных (или в любой другой технической области) я понял, что начинать с малого и участвовать в проектах, которые актуальны или применимы лично для вас, — это самый эффективный способ обучения. Особенно, если вы относитесь к тому типу людей, которые быстрее учатся на практике. Это конкретное упражнение может показаться очень простым, и мы не создавали все с нуля как таковое, но я чувствую, что эти быстрые победы (надеюсь) подтолкнут нас вперед.
  3. Принимать ошибки. Много раз во время сеанса я получал сообщения об ошибках, и, хотя это могло отвлекать мое внимание и замедлять работу, я решил сосредоточиться, двигаться дальше и дойти до конца. Ведь это только мой первый дубль! Я считаю, что ошибки — величайшие учителя, и мы должны принять их. Идти вперед можно только совершая ошибки!

Если вы добрались до этой части, спасибо за чтение, и я надеюсь, что это вдохновит вас начать с чего-то и продолжить практиковать. Кроме того, загляните в Generation Girl (instagram или LinkedIn), если вы еще этого не сделали, и я желаю вам всего наилучшего в вашем путешествии по науке о данных!

Или вы хотите сотрудничать в проекте, дайте мне знать! :)

Спасибо за чтение!

Не забудьте подписаться на среду Generation Girl, нажав на ссылку ниже, чтобы увидеть другие классные статьи (такие как эта!), созданные нашим сообществом 😊💕