Навигация по каналу:
Личное:
#self – информация обо мне
#path – ключевые этапы жизненного пути
#recommend – рекомендации, что посмотреть или почитать
#offtopic – что-нибудь от себя
Рабочее:
#papers – статьи, разборы
#links – ссылки на мой контент
#soft – soft-скиллы
#hard – hard-скиллы
#learn – обучающие материалы
#code – код или ссылки на код
#cases – случаи и задачи из работы
#tips – небольшие советы
#results – результаты работы
#progress – результаты личного роста
#offer – путь к первому офферу
Личное:
#self – информация обо мне
#path – ключевые этапы жизненного пути
#recommend – рекомендации, что посмотреть или почитать
#offtopic – что-нибудь от себя
Рабочее:
#papers – статьи, разборы
#links – ссылки на мой контент
#soft – soft-скиллы
#hard – hard-скиллы
#learn – обучающие материалы
#code – код или ссылки на код
#cases – случаи и задачи из работы
#tips – небольшие советы
#results – результаты работы
#progress – результаты личного роста
#offer – путь к первому офферу
Обо мне
Как я говорил ранее, непосредственно к ML/DA/DS мой бэкграунд имеет слабое отношение, однако что-то же я делал эти24 года? Этот пост я пишу для того, чтобы сложить цельную картинку моего "старта" к профессии. В силу большого количества различных событий в течение жизни, расположу по возможности в хронологическом порядке и разобью на несколько публикаций. Пост обещает быть длинным, а многое из написанного вообще не будет относиться к текущим интересам, но все же постараюсь писать нескучно.
🟡 🟡 🟡 лет.
Шли прекрасные нулевые годы: 2007-й был еще далеко впереди, а вера в светлое посткоммунистическое будущее пронизывала воздух, наполненный ароматом цветущих и распускающихся в конце апреля деревьев. Я жил совершенно обычной дворовой жизнью, где не было места ссорам и вражде — конфедерацией армян, азербайджанцев и русских мы гоняли бомжей камнями, часами не слезали с тютины (шелковицы), прыгали по гаражам, взрывали то, что взрывается, стреляли из всего, что способно стрелять, и вообще в полной мере осознавали свое величие, которое меркло разве что перед старшими приятелями, которые могли гулять в соседнем дворе через дорогу.
Моё счастливое детство омрачал лишь гнёт родителей и родственников, заставлявших меня читать, писать и считать. Несмотря на оказываемое сопротивление, я безнадежно проигрывал, и в 4 года научился читать, с 6 лет уже осваивал книги самостоятельно, а к 8 годам выиграл школьную олимпиаду "Кенгуру" по математике, заняв в регионе двузначное место.
После этого я начал уверенно побеждать в битве против обучения — книги я осваивал с большим удовольствием, однако свое собственное мнение обрёл чрезвычайно рано. И в связи с этим я решил, что изучать буду лишь то, что интересно лично мне.
🟡 🟡 🟡 🟡 лет.
За этот период жизни я не могу вспомнить практически ничего значимого и выдающегося — как и все, я ходил в обычную школу, занимался баскетболом, а впоследствии и легкой атлетикой, на карманные деньги посещал компьютерные клубы после занятий, дома же сидел на сайте vkontakte.ru с использованием 3G-модема от МТС, а также посещал занятия в компьютерной школе, где изучал Word, Excel, и мою среднестатистическую жизнь ничего не нарушало.
Время шло, одних лишь книг, игр и веб-скроллинга мне было очевидно мало, в связи с чем я уже в этом возрасте начал задумываться о том, чем буду заниматься в дальнейшем.
#self #path
Как я говорил ранее, непосредственно к ML/DA/DS мой бэкграунд имеет слабое отношение, однако что-то же я делал эти
Шли прекрасные нулевые годы: 2007-й был еще далеко впереди, а вера в светлое посткоммунистическое будущее пронизывала воздух, наполненный ароматом цветущих и распускающихся в конце апреля деревьев. Я жил совершенно обычной дворовой жизнью, где не было места ссорам и вражде — конфедерацией армян, азербайджанцев и русских мы гоняли бомжей камнями, часами не слезали с тютины (шелковицы), прыгали по гаражам, взрывали то, что взрывается, стреляли из всего, что способно стрелять, и вообще в полной мере осознавали свое величие, которое меркло разве что перед старшими приятелями, которые могли гулять в соседнем дворе через дорогу.
Моё счастливое детство омрачал лишь гнёт родителей и родственников, заставлявших меня читать, писать и считать. Несмотря на оказываемое сопротивление, я безнадежно проигрывал, и в 4 года научился читать, с 6 лет уже осваивал книги самостоятельно, а к 8 годам выиграл школьную олимпиаду "Кенгуру" по математике, заняв в регионе двузначное место.
После этого я начал уверенно побеждать в битве против обучения — книги я осваивал с большим удовольствием, однако свое собственное мнение обрёл чрезвычайно рано. И в связи с этим я решил, что изучать буду лишь то, что интересно лично мне.
За этот период жизни я не могу вспомнить практически ничего значимого и выдающегося — как и все, я ходил в обычную школу, занимался баскетболом, а впоследствии и легкой атлетикой, на карманные деньги посещал компьютерные клубы после занятий, дома же сидел на сайте vkontakte.ru с использованием 3G-модема от МТС, а также посещал занятия в компьютерной школе, где изучал Word, Excel, и мою среднестатистическую жизнь ничего не нарушало.
Время шло, одних лишь книг, игр и веб-скроллинга мне было очевидно мало, в связи с чем я уже в этом возрасте начал задумываться о том, чем буду заниматься в дальнейшем.
#self #path
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Подготовка к первому собеседованию, 14 дней
Прошло уже ± две недели подготовки — вспоминал алгоритмы, остановился на тренировках от Яндекса 1.0, там представлены любопытные задачи.
Если честно, то по большей части сложностей они не вызвали: как говорится, с помощью лома и какой-то там матери решил порядка 20 задач — пока хватит.
Если чуть подробнее, то действительно слегка пришлось поломать голову, но совокупно самые сложные задачи занимали порядка 1.5-3 часов и 2-3 попытки — если лениться самому продумать все тесты. Некоторые задачи были такого же уровня или даже точь-в-точь такие, какие я даю своим ученикам. С мыслью: "Если не сдам с первого раза, горе мне как преподавателю" я их все же успешно сдавал)
Выложил также репозиторий на github😁 (надеюсь, однажды он обновится, и я все же решу все задачи).
Однако, на аналитику данных требуются не столько алгоритмы, сколько фундаментальное понимание теорвера и статистики, в связи с чем пора переключиться на повторение вузовских материалов + углублённый разбор популярных вопросов с собеседований. Часть материалов уже нашел, как будет готово — поделюсь. Там будут интересные конспекты, которые не раз пригодились мне в том числе и в СПбГУ.
#hard #progress #offer #code
Прошло уже ± две недели подготовки — вспоминал алгоритмы, остановился на тренировках от Яндекса 1.0, там представлены любопытные задачи.
Если честно, то по большей части сложностей они не вызвали: как говорится, с помощью лома и какой-то там матери решил порядка 20 задач — пока хватит.
Если чуть подробнее, то действительно слегка пришлось поломать голову, но совокупно самые сложные задачи занимали порядка 1.5-3 часов и 2-3 попытки — если лениться самому продумать все тесты. Некоторые задачи были такого же уровня или даже точь-в-точь такие, какие я даю своим ученикам. С мыслью: "Если не сдам с первого раза, горе мне как преподавателю" я их все же успешно сдавал)
Выложил также репозиторий на github
Однако, на аналитику данных требуются не столько алгоритмы, сколько фундаментальное понимание теорвера и статистики, в связи с чем пора переключиться на повторение вузовских материалов + углублённый разбор популярных вопросов с собеседований. Часть материалов уже нашел, как будет готово — поделюсь. Там будут интересные конспекты, которые не раз пригодились мне в том числе и в СПбГУ.
#hard #progress #offer #code
Please open Telegram to view this post
VIEW IN TELEGRAM
Тренировки по алгоритмам от Яндекса
Новый сезон — новые задачи и форматы
👍2
К теме о навыках и об их применимости
После покупки премиума в Telegram захотел себе анимированный значок: пара запросов в🔎 и 📺 , 30 минут в 👉 , 15 минут конвертации и результат готов:
👨💻
Даже если кажется, что старый опыт уже никогда не пригодится — это скорее всего не так.
#offtopic
После покупки премиума в Telegram захотел себе анимированный значок: пара запросов в
Даже если кажется, что старый опыт уже никогда не пригодится — это скорее всего не так.
#offtopic
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
В этом возрасте я осознал, что пора двигаться вперед — изменчивый мир под меня прогибаться не спешил, и я решительно вмешался в этот процесс.
Уже не помню, как это произошло, но мне стукнуло в голову, что я хочу организовывать турниры по различным онлайн-играм. К этому времени я уже достаточно хорошо ознакомился с компьютером, чтобы уметь открыть
Я понимал, что это только начало, — за этим турниром последовал еще десяток, я вошел в руководство большого количества сообществ, связанных с теми играми, где проводил соревнования, а в некоторых случаях организовывал такие сообщества самостоятельно. На пике деятельности турниры собирали 128 команд по 5+ человек в каждой (подумать только – 640 игроков, это ведь несколько лиг). Порой удавалось даже договариваться с официальными представителями игр и формировать призовой фонд исключительно из выделенных ими средств. В иных случаях в качестве призовых шли средства, полученные с рекламы. В рамках организации собственных сообществ я налаживал работу добровольцев-администраторов, да так, что мы упирались в пределы публикаций в сутки— больше 50 постов в день
Сам играть я тоже не забывал — был даже период времени, когда я планировал попасть в киберспорт. На сайте aim400kg, на тот момент весьма известном, я уверенно забирал топ-3 в тестах на скорость реакции среди всего СНГ. Великая киберспортивная карьера закончилась тем, что у меня на пике славы на год забрали компьютер, и я вернулся к обычному любительскому формату. Здесь я тоже не обошелся без самовыражения: монтировал видео, связанные с играми, изучая различные материалы, преимущественно на английском языке — уже тогда стало ясно, насколько велика разница между русско- и англоязычным сообществом с точки зрения количества информации. В это же время начал изучать 3D-моделирование, преимущественно Cinema4D в связке с After Effects.
В связи с тем, что к тому времени я жил в доме, а не в квартире, я имел свои обязанности по хозяйству — кто в теме, тот знает афоризм про нескончаемый ремонт в доме, и сейчас разделяет мою боль. За эти годы я научился практически всему, что необходимо для самостоятельного ремонта в доме, а мои навыки в 3D позволили даже смоделировать будущую сауну и оценить расход материалов на её строительство.
Разумеется, времени на учебу, а главное – желания – практически не оставалось, но, несмотря на это, я даже плавно набирал обороты, а занятия математикой с родственниками позволили мне в некоторой степени проявить свои способности.
Если подводить черту этому периоду, на который пришелся переходный возраст, то, хоть и не без изъянов, прошел он достаточно спокойно. Теперь я был еще более готов к новым свершениям.
#self #path
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
К этому времени я влился в сообщество "Потрачено", посвященное кривым переводам различных игр, к которому имею некоторое отношение и по сей день. Там же сделал своего первого бота, который на волне популярности в то время очень быстро набрал лимит в 10.000 друзей (напомню, что когда боты
Программирования в этом всем, кстати, практически не было. Существовал сайт, где можно было создавать гибкие шаблоны запросов и ответов для так называемого искусственного интеллекта, а также софт, позволявший отправлять личные сообщения пользователей на этот сайт, получать ответ и выдавать его пользователю обратно. Таким образом, мне достаточно было сделать большой набор гибких шаблонов для взаимодействия с пользователями, запустить нужную программу, и наблюдать. Результат превзошел все ожидания – несмотря на все особенности, общение с ботом было веселым и осмысленным, он сильно выделялся на фоне конвейерных поделок.
Самым сложным вопросом стал хостинг проекта. Первое время товарищ по сообществу за 50р./мес. держал его на своем ПК (надо ли говорить о том, с каким downtime мы имели дело?). Конечно, долго так продолжаться не могло, и я изучил вопрос онлайн-хостинга. Я даже не могу передать ту боль, которую испытал, когда узнал, что мой Linux-сервер – это одна лишь командная строка, через которую нужно поставить рабочий стол и все сопутствующее. С учетом всех допущенных оплошностей, на следующий день я увидел заветный рабочий стол Ubuntu. Однако, с объемом ОЗУ ≈256 Мбайт, это был скорее рабочий стул, который при запуске
Помимо прочего, я длительное время принимал участие в одном из семейных проектов – ежегодной всероссийской конференции, где мои обязанности в раннем возрасте ограничивались базовыми задачами "подай-принеси", а к 16-ти годам и до недавнего времени (здесь немного отступлю от хронологии) я принимал все большее участие в вопросах, связанных с техническим обеспечением и взаимодействием с участниками. Когда наступил COVID-19, работа усложнилась еще и тем, что часть участников присутствовала очно, часть заочно, и в мои задачи входило обеспечение возможности всем увидеть и услышать друг друга. Задача осложнялась особенно тем, что среди них были и люди весьма почтенного возраста, и просто со своими особенностями — нужно было набраться терпения.
#self #path
Please open Telegram to view this post
VIEW IN TELEGRAM
Все накопленные на тот момент увлечения я лишь продолжал и развивал – участвовал и выигрывал в небольших конкурсах, мои видеоролики публиковались в официальных сообществах игровых проектов. Мы наращивали сотрудничество с сообществами близкой тематики — например, несколько раз исключительно из дружеских побуждений наши рекламные публикации оказывались в небезызвестном сообществе "Мои любимые юморески" — просто потому что неплохо складывалось личное общение с админом, который весьма альтруистично подходил к подобным вопросам. В определенный момент суммарная аудитория сообществ, которые находились под моим управлением, составляла порядка 300.000 человек, что давало мне некоторые возможности для направления аудитории на личные проекты, чем я время от времени пользовался в своих целях, или же помогал друзьям.
На тот момент в компьютерной школе я уже прошел базовые пользовательские курсы, и началось время программирования. Python как учебный язык только начал набирать обороты, поэтому учился я все еще на Pascal ABC NET, о чем, впрочем, не жалею. В рамках курса мы решали задачи для начинающих — простые задачи из геометрии, математики, ряды Тейлора, робот на координатной плоскости, базовые сортировки и так далее. Я всегда в таких вещах был "на передовой" — пытался решить эти задачи быстрее всех, что нередко удавалось, и в целом легко и быстро схватывал идеи алгоритмов.
Учеба в школе становилась всё проще, оценки всё лучше, личная жизнь кипела, да и вообще всё складывалось замечательно. Однако, над моей головой нависла угроза из трех страшных букв, и практически каждый из тех, кто прочитает этот текст, тоже в свое время прошёл (или пройдет) через этот этап.
#self #path
Please open Telegram to view this post
VIEW IN TELEGRAM
pyrssa – библиотека для анализа временных рядов 📈
Давненько тут не было публикаций, но не потому что ничего не происходило. Сегодня хочу рассказать немного о своей магистерской дипломной работе в СПбГУ, которая продолжается и по сей день – библиотека для анализа временных рядов на основе метода Singular Spectrum Analysis.
Данный метод имеет мощную теоретическую базу с большим количеством замечательных свойств: позволяет производить разложение временных рядов на отдельные составляющие (тренд, период, шум), строить различные виды прогноза, заполнять пропуски (как частный случай прогноза, разумеется), с помощью итеративных алгоритмов позволяет улучшать разделимость компонент ряда, если они смешиваются между собой, находить момент разладки временного ряда (когда он меняет свою структуру, временно или навсегда), имеет приложение к многомерным данным или сразу к нескольким временным рядам (multivariate time series), и многое другое.
В рамках работы мне предстояло адаптировать существующую библиотеку Rssa для R на язык Python. Сделано это в таком виде, потому что переписывать заново все структуры данных и кучу рутины бессмысленно, а потери в скорости исключительно константные — перевод типов данных, да и только.
Работа оказалась объемной в силу большого количества непредвиденных сложностей адаптации типов данных, косяков в сторонних библиотеках, необходимости в полностью новой реализации графиков, написания документации, тестов, примеров, да и в целом в оформлении работы в приличную библиотеку.
Пользоваться ей можно уже сейчас, удачи только разобраться в теории, потому что для применения метода на практике сперва нужно попотеть :)
📖 Cписок литературы (увы, не бесплатно):
Singular Spectrum Analysis with R (Use R!)
Analysis of Time Series Structure: SSA and related techniques
#self #code #hard
Давненько тут не было публикаций, но не потому что ничего не происходило. Сегодня хочу рассказать немного о своей магистерской дипломной работе в СПбГУ, которая продолжается и по сей день – библиотека для анализа временных рядов на основе метода Singular Spectrum Analysis.
Данный метод имеет мощную теоретическую базу с большим количеством замечательных свойств: позволяет производить разложение временных рядов на отдельные составляющие (тренд, период, шум), строить различные виды прогноза, заполнять пропуски (как частный случай прогноза, разумеется), с помощью итеративных алгоритмов позволяет улучшать разделимость компонент ряда, если они смешиваются между собой, находить момент разладки временного ряда (когда он меняет свою структуру, временно или навсегда), имеет приложение к многомерным данным или сразу к нескольким временным рядам (multivariate time series), и многое другое.
В рамках работы мне предстояло адаптировать существующую библиотеку Rssa для R на язык Python. Сделано это в таком виде, потому что переписывать заново все структуры данных и кучу рутины бессмысленно, а потери в скорости исключительно константные — перевод типов данных, да и только.
Работа оказалась объемной в силу большого количества непредвиденных сложностей адаптации типов данных, косяков в сторонних библиотеках, необходимости в полностью новой реализации графиков, написания документации, тестов, примеров, да и в целом в оформлении работы в приличную библиотеку.
Пользоваться ей можно уже сейчас, удачи только разобраться в теории, потому что для применения метода на практике сперва нужно попотеть :)
Singular Spectrum Analysis with R (Use R!)
Analysis of Time Series Structure: SSA and related techniques
#self #code #hard
Please open Telegram to view this post
VIEW IN TELEGRAM
🆒2
Трекинг игроков в волейболе: связка YOLOv8 + DeepSort 📼
Сегодня расскажу о еще одном своём пет-проекте, который я делал еще в СПбГУ для зачёта по одному из предметов буквально за пару дней, а теперь уже по мере возможностей и времени шлифую и расширяю, чтобы впоследствии в перспективе применять его к своим данным и уже сейчас закидывать в резюме.
Задача
Задача состоит в том, чтобы отслеживать игроков на видеозаписях игры в волейбол (выбрал неспроста — ранее играл за сборные обоих своих вузов, в СПбГУ последний год был капитаном). Запись ведется строго сзади за лицевой линией, т.е. не как в профессиональном спорте сбоку и движется в зависимости от местоположения мяча.
Результат
На текущий момент удалось отладить связку YOLOv8 для детекции игроков и DeepSort для трекинга, OpenCV для проекции позиций треков на плоскость площадки, а также сверху прикрутил несколько эвристических фильтраций, чтобы отсеивать ложные детекции и неправильные треки. Более или менее адекватно оформленный ноутбук с кодом и пояснениями захостил вот здесь.
Последнее видео с лучшим результатом вот здесь.
От себя добавлю, что первоначальная установка TensorFlow для использования возможностей CUDA — это то еще приключение на 20 минут. Особенно весело было после установки узнать, что YOLOv8 переехал с TensorFlow на PyTorch🔫 🐻
TODO:
1) Определение игрового номера игрока — опираясь на эту информацию уже можно будет подводить статистику по игровым партиям.
2) Определение и трекинг мяча — нужно обучить YOLO отдельно на синтетических данных с игровыми мячами – задача несложная, но кропотливая, на этой основе уже можно будет делать выводы о розыгрышах.
3) Определение игрового действия — это уже из области легкой фантастики, но тоже реально, если удастся решить ранние задачи.
Также мне всегда интересна любая обратная связь, хотя, конечно, посты такие, что ни добавить, ни убавить.
#self #hard #code
Сегодня расскажу о еще одном своём пет-проекте, который я делал еще в СПбГУ для зачёта по одному из предметов буквально за пару дней, а теперь уже по мере возможностей и времени шлифую и расширяю, чтобы впоследствии в перспективе применять его к своим данным и уже сейчас закидывать в резюме.
Задача
Задача состоит в том, чтобы отслеживать игроков на видеозаписях игры в волейбол (выбрал неспроста — ранее играл за сборные обоих своих вузов, в СПбГУ последний год был капитаном). Запись ведется строго сзади за лицевой линией, т.е. не как в профессиональном спорте сбоку и движется в зависимости от местоположения мяча.
Результат
На текущий момент удалось отладить связку YOLOv8 для детекции игроков и DeepSort для трекинга, OpenCV для проекции позиций треков на плоскость площадки, а также сверху прикрутил несколько эвристических фильтраций, чтобы отсеивать ложные детекции и неправильные треки. Более или менее адекватно оформленный ноутбук с кодом и пояснениями захостил вот здесь.
Последнее видео с лучшим результатом вот здесь.
От себя добавлю, что первоначальная установка TensorFlow для использования возможностей CUDA — это то еще приключение на 20 минут. Особенно весело было после установки узнать, что YOLOv8 переехал с TensorFlow на PyTorch
TODO:
1) Определение игрового номера игрока — опираясь на эту информацию уже можно будет подводить статистику по игровым партиям.
2) Определение и трекинг мяча — нужно обучить YOLO отдельно на синтетических данных с игровыми мячами – задача несложная, но кропотливая, на этой основе уже можно будет делать выводы о розыгрышах.
3) Определение игрового действия — это уже из области легкой фантастики, но тоже реально, если удастся решить ранние задачи.
Также мне всегда интересна любая обратная связь, хотя, конечно, посты такие, что ни добавить, ни убавить.
#self #hard #code
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
Алготрейдинг 💼
Предчувствуя очередное "Разбежавшись прыгну со скалы" от российского рынка, шустро набросал код для выставления стоп-ордера по рыночной цене в Tinkoff Investments API😁
Сделаю апдейт, если все пройдет успешно (если нет — удалю пост🙂 ).
UPD: ИИС на внебиржевом рынке не торгуется, заявка успешно стоит, но смысла в ней нет⭐️
#code #offtopic
Предчувствуя очередное "Разбежавшись прыгну со скалы" от российского рынка, шустро набросал код для выставления стоп-ордера по рыночной цене в Tinkoff Investments API
Сделаю апдейт, если все пройдет успешно (если нет — удалю пост
UPD: ИИС на внебиржевом рынке не торгуется, заявка успешно стоит, но смысла в ней нет
#code #offtopic
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥1
Поиск работы, 69 дней 📣
Долго я не писал ничего на эту тему, хотя уже есть некоторые движения.
👀 За это время я полностью прошел курс по SQL: Практический курс для новичков по SQL и PostgreSQL (Илья Фофанов).
Опишу кратко: ранее в рамках вуза уже видел SQL, знал материал до INNER/OUTER JOIN и подзапросов, хотел заглянуть дальше, плюс расширить кругозор. Со своей задачей курс справился отлично: минимум теории, максимум практики, повествование сопровождается советами бывалого человека. Если нужен SQL на уровне побочной работы, типа Data Engineer, то хватит с головой. Курс занял 5 дней (Прямо как обещают на обложках учебников).
👀 Также я понял, что необходимо укреплять фундамент, поэтому повторно прошел курс теории вероятностей. Не так, как это часто в вузе бывает, а на любых не слишком понятных мне моментах я старался уйти вглубь (наконец-то руки дошли до доказательства, откуда же в нормальном распределении появляется множитель с числом 3⃣ ). В совокупности это заняло порядка 14 дней. Взял за основу вот эту книгу: Чернова Н. И. Теория Вероятностей.
Очень легко читается, много подробностей: местами лишних, местами спорных, но в совокупности для второго (❗️ ) прохода по ТВ очень приятная книга. Также вся эта тема сподвигла меня на ведение рукописного конспекта, который я буду со временем дополнять.
👀 Параллельно подбивал резюме и проекты, немного наполнял контентом свой Github, подавал резюме в компании.
Результат пока следующий: 4 заявки, из которых:
1 – без ответа;
1 – с негативным (уже нашли человека);
1 – с собеседованием и жду тестовое;
1 – с успешным первым тестовым и отправленным вторым.
Есть чувство, что второе тестовое тоже хорошее, время покажет.
🖼 Картинка к посту – шедевр. Мне всегда нравилось представлять, что происходит в этот момент у бедных фотомоделей в голове: "Господи, что я тут делаю?", да и эти улыбки – им анекдот на питоне написали?
class Man:
def _ _init_ _(self, hat):
self._hat = hat
self.fits = True
#hard #learn #progress #offer
Долго я не писал ничего на эту тему, хотя уже есть некоторые движения.
Опишу кратко: ранее в рамках вуза уже видел SQL, знал материал до INNER/OUTER JOIN и подзапросов, хотел заглянуть дальше, плюс расширить кругозор. Со своей задачей курс справился отлично: минимум теории, максимум практики, повествование сопровождается советами бывалого человека. Если нужен SQL на уровне побочной работы, типа Data Engineer, то хватит с головой. Курс занял 5 дней (Прямо как обещают на обложках учебников).
Очень легко читается, много подробностей: местами лишних, местами спорных, но в совокупности для второго (
Результат пока следующий: 4 заявки, из которых:
1 – без ответа;
1 – с негативным (уже нашли человека);
1 – с собеседованием и жду тестовое;
1 – с успешным первым тестовым и отправленным вторым.
Есть чувство, что второе тестовое тоже хорошее, время покажет.
class Man:
def _ _init_ _(self, hat):
self._hat = hat
self.fits = True
#hard #learn #progress #offer
Please open Telegram to view this post
VIEW IN TELEGRAM
Если кратко, то собеседование можно описать словом кринж (от англ. to cringe, прим. автора).
Мне пришло в голову начать рассказ о себе вообще не с профильных вещей: рассказать о левых ЯП, которые я тоже знаю и использовал, потом начал говорить про свой МаТеМаТиЧеСкИй бэкграунд, заявил, что хорош в теорвере, сразу же получил запрос "Сформулируйте ЦПТ Ляпунова", на что я неловко парировал "Знаю только в классической формулировке" и сказал что-то невнятно-неточное, но в общем по теме.
Когда дошло до матриц, попросили обратить матрицу размера 2х3. Я с умным видом заявил, что дострою рядом единичную матрицу и проведу элементарные преобразования, на что меня вполне справедливо прервали фразой "На самом деле, эта матрица необратима". МаТеМаТиК: забыл, что обратимость матриц требует квадратной формы. Через полчаса после собеседования вспомнил, что можно было бы отразить удар псевдообратной матрицей (да-да, тот самый момент, когда понимаешь через несколько часов, как надо было ответить хулигану в споре, чтобы все закончилось в твою пользу). Делаю вывод: надо пройтись и по линейной алгебре тоже.
Многие вопросы я сразу отсекал фразами наподобие "Теорию алгоритмов я не знаю, знаю только практику" (чукча не читатель — чукча писатель). По поводу TF и PyTorch были вопросы, но я даже ONNX еще не трогал: сказал, зачем он идейно, не более. Диалог получился тупиковый: спрашивать почти нечего, а обсуждать не выходит, итог: сошлись на тестовом задании.
Потом вопросы общего плана: как я отстаиваю свою точку зрения в споре, что мне нужно для комфортной работы, ожидаемая ЗП и т.д. Ознакомился с задачами компании, мне все понравилось, в целом очень близко к тому, что меня интересует, но дальше уже вопрос, насколько я буду интересен компании.
С теорией вероятностей у меня все хорошо в том смысле, что я достаточно точно оцениваю вероятности событий в своей жизни, поэтому не стал удивляться, что тестовое задание пока не прислали. Буду верить, что это потому что люди заняты своими делами...
Stay tuned
#offer
Please open Telegram to view this post
VIEW IN TELEGRAM
🌚1
Тестовое задание: часть 1 ✍️
Как я ранее писал, мне после собеседования обещали тестовое задание — вот и оно.
Формулировка задания📁
Используя PyTorch, обучить модель классификации лица по 5 основным эмоциям (angry, sad, neutral, happy, surprise). На выходе получить модель, логируя результаты в tensorboard, сравнить accuracy на train-е и валидации. Конвертировать модель в формат ONNX и выполнить инференс в ONNX Runtime. Скрипт должен иметь возможность получать изображение как с Web-камеры/видео, так и из файла.
Таким образом, требуется прислать архив (или ссылка на google colab), содерджащий все этапы обучения модели, а также конвертированный бинарный файл и скрипт инференса.
Срок — 2 дня.
Первое впечатление🐻
На собеседовании я признался, что:
1) Модели в PyTorch я не обучал: ранее обучал лишь на TF или использовал предобученные в PyTorch.
2) Из ONNX слышал только эти четыре буквы и знаю, зачем они нужны, но сам не трогал.
3) Вполне логичный вывод из пункта 2, что инференс моделей я не делал.
4) JavaScript не знаю (почти) и не пользовался (может, это фантомное воспоминание, но такой вопрос как будто был).
А также дополню:
5) С TensorBoard я ранее тоже не взаимодействовал.
Первый вопрос, который возник: что же я делал все эти годы?
Второй: Возможно ли за 2 дня изучить PyTorch, TensorBoard, ONNX, ONNX Runtime и JS?
Третий: Это стресс-тестовое задание, которое специально подбивалось под то, чего я не умею, чтобы проверить меня на прочность?🤔
Процесс работы⏲
0⃣ Нулевой день
На самом деле, у меня было еще несколько часов за день до решения задания, которые я потратил на изучение известных датасетов, моделей, SOTA-решений, в какую сторону правильнее копать, плюс куча полезных ссылок, связанных с подбором параметров для обучения, на которые было удобно ссылаться впоследствии.
Что в итоге:
Датасет – FER-2013. ЧБ-изображения размера 48х48 в количестве 36к.
Модели – VGG, ResNet. Показывали в среднем более высокое качество, часто используются. EfficientNet хорошо себя проявил на другом подобном датасете, но вполне возможно, что разница в 6 лет между этим датасетом и моделью сыграла свою роль в ее популярности.
1️⃣ Первый день
Сперва я занимался предобработкой датасета, изучив баланс классов и сами изображения для каждого класса. Вердикт: не оч. Неудивительно, что SOTA-решения показывают точность около 75%, с такими-то рожами... Но, в связи с тем, что это единственный хорошо изученный и одновременно небольшой датасет, полюбить пришлось и козла.
Первым выбором стала модель VGG19, усовершенствованная версия которой светилась среди SOTA-решений этого года (Спустя 10 лет не только я оказался в этом богом забытом месте). SOTA-версию идейно я понял, а вот технически не понял, поэтому не стал юзать, хотя можно было бы изучить. Просто не захотел напороться на подводные камни там, где имел слабое представление и кучу зависимостей от старых версий библиотек.
К концу первого дня у меня была первая готовая модель, с учетом первой пробы пера обучения на PyTorch и логгирования в TensorBoard, а также ударов всеми частами тела о❌ CUDA Out Of Memory посреди процесса, которые, конечно, не решались ни одним известным способом, потому что повторная загрузка модели съедала видеопамять, а назад не возвращала ни при каких обстоятельствах.
Точность: 73%. Близко к SOTA, за исключением того, что у меня лишь 5 классов, а не 7, как в изначальном датасете.
На этом день закончился.
#offer
Как я ранее писал, мне после собеседования обещали тестовое задание — вот и оно.
Формулировка задания
Используя PyTorch, обучить модель классификации лица по 5 основным эмоциям (angry, sad, neutral, happy, surprise). На выходе получить модель, логируя результаты в tensorboard, сравнить accuracy на train-е и валидации. Конвертировать модель в формат ONNX и выполнить инференс в ONNX Runtime. Скрипт должен иметь возможность получать изображение как с Web-камеры/видео, так и из файла.
Таким образом, требуется прислать архив (или ссылка на google colab), содерджащий все этапы обучения модели, а также конвертированный бинарный файл и скрипт инференса.
Срок — 2 дня.
Первое впечатление
На собеседовании я признался, что:
1) Модели в PyTorch я не обучал: ранее обучал лишь на TF или использовал предобученные в PyTorch.
2) Из ONNX слышал только эти четыре буквы и знаю, зачем они нужны, но сам не трогал.
3) Вполне логичный вывод из пункта 2, что инференс моделей я не делал.
4) JavaScript не знаю (почти) и не пользовался (может, это фантомное воспоминание, но такой вопрос как будто был).
А также дополню:
5) С TensorBoard я ранее тоже не взаимодействовал.
Первый вопрос, который возник: что же я делал все эти годы?
Второй: Возможно ли за 2 дня изучить PyTorch, TensorBoard, ONNX, ONNX Runtime и JS?
Третий: Это стресс-тестовое задание, которое специально подбивалось под то, чего я не умею, чтобы проверить меня на прочность?
Процесс работы
На самом деле, у меня было еще несколько часов за день до решения задания, которые я потратил на изучение известных датасетов, моделей, SOTA-решений, в какую сторону правильнее копать, плюс куча полезных ссылок, связанных с подбором параметров для обучения, на которые было удобно ссылаться впоследствии.
Что в итоге:
Датасет – FER-2013. ЧБ-изображения размера 48х48 в количестве 36к.
Модели – VGG, ResNet. Показывали в среднем более высокое качество, часто используются. EfficientNet хорошо себя проявил на другом подобном датасете, но вполне возможно, что разница в 6 лет между этим датасетом и моделью сыграла свою роль в ее популярности.
Сперва я занимался предобработкой датасета, изучив баланс классов и сами изображения для каждого класса. Вердикт: не оч. Неудивительно, что SOTA-решения показывают точность около 75%, с такими-то рожами... Но, в связи с тем, что это единственный хорошо изученный и одновременно небольшой датасет, полюбить пришлось и козла.
Первым выбором стала модель VGG19, усовершенствованная версия которой светилась среди SOTA-решений этого года (Спустя 10 лет не только я оказался в этом богом забытом месте). SOTA-версию идейно я понял, а вот технически не понял, поэтому не стал юзать, хотя можно было бы изучить. Просто не захотел напороться на подводные камни там, где имел слабое представление и кучу зависимостей от старых версий библиотек.
К концу первого дня у меня была первая готовая модель, с учетом первой пробы пера обучения на PyTorch и логгирования в TensorBoard, а также ударов всеми частами тела о
Точность: 73%. Близко к SOTA, за исключением того, что у меня лишь 5 классов, а не 7, как в изначальном датасете.
На этом день закончился.
#offer
Please open Telegram to view this post
VIEW IN TELEGRAM
Paperswithcode
Papers with Code - FER2013 Dataset
Fer2013 contains approximately 30,000 facial RGB images of different expressions with size restricted to 48×48, and the main labels of it can be divided into 7 types: 0=Angry, 1=Disgust, 2=Fear, 3=Happy, 4=Sad, 5=Surprise, 6=Neutral. The Disgust expression…
👍2🍌1
Приходишь пожарить картофель – уходишь Дата-саентистом
P.S. автор рецепта хоть бы лямбду сказал, чтобы понимать, какие жертвы ждать среди картофеля...
#offtopic
P.S. автор рецепта хоть бы лямбду сказал, чтобы понимать, какие жертвы ждать среди картофеля...
#offtopic
🍾1
Тестовое задание: часть 2 ✍️
2️⃣ Второй день
Проснулись — улыбнулись: все шло по моему рабочему плану "К концу первого дня первая модель, к концу второго – готовый инференс".
Я решил довести обучение до ума: чуток подрегулировать параметры модели, learning rate и прочие вещи. По итогу на все той же ласточке VGG19 достаточно быстро довел до 76%, после чего успокоился и решил, что для тестового задания качество будет достаточным. Дальше — веселее, пришло время конвертации модели в ONNX.
Сразу же вылез тот факт, что модель я тренировал на изображениях размера 48x48, а такая интересная штука, как AdaptiveAvgPool2d (который и позволяет подавать модели фотографии изображения другого размера для обучения) конвертируется в ONNX только для изображений формата 224x224. В противном же случае возникает ошибка, которая в действительности сейчас практически не решается. Таким образом, модель сама по себе работает, а в ONNX перевести не вариант. Перепробовал 4-5 наиболее адекватных решений из обсуждений этой проблемы на гитхабе, ни одно из них не помогло (одно даже заработало, только вот точность упала до 50%).
Итог: время на исходе, часы потрачены, а модели нет. Tо есть, случилась ситуация как в этих детских играх с бросанием кубика и ходами по количеству выпавших очков, где перед финишем ты попадаешь на клетку, возвращающую тебя на самое начало. Делать нечего — решил учить другую модель, остановился на ResNet. Благо, там этот же AdaptiveAvgPool имел размерность 1х1, за счет чего не возникло проблем при конвертации (и это я проверил, разумеется, до обучения).
С помощью лома и какой-то там матери обучил модель, точность которой составила 72%. Падением на 4% я удовлетворился.
Далее — инференс. Сразу же при поиске, как подключить результат к вебке, нашел ONNX Runtime Web Demo от Microsoft, в котором по факту была задача из моего ТЗ. Практически тупо один в один: модель для классификации эмоций, позволяющая загружать картинки и включать вебку. Более того, обучена она была на том же датасете. Опять же, к гадалке не ходи, скорее всего при выборе задачи эту демку там же и нашли. Разумеется, я не стал далеко уходить от примера — установил Node JS, запустил у себя этот проект, вырезал из него все остальные модели, наладил связи и запустил свою.
В результате было что-то несусветное: счастливые люди превратились в дед-инсайдов, грустные – в агрессивных, и далее по списку. Написал инференс на Python, стал проверять на картинках — там все в порядке. Главное и единственное подозрение пало на входные данные. Подозрения подтвердились проверкой и выводом информации в консоль, дальше я примерно имитируя трансформации, которые производились с помощью PyTorch перед подачей в модель, дописал их на JavaScript, основываясь на значениях тензоров, и в итоге получил результат близкий, но все же не идентичный.
✅ Итог: на часах 5 утра, я освоил PyTorch и TensorBoard за один день, ONNX, ONNX Runtime за второй день, а JavaScript — за одну ночь. Модель обучена и работает, хотя и слегка калечно. Тестовое задание упаковано и отправлено.
#offer
Проснулись — улыбнулись: все шло по моему рабочему плану "К концу первого дня первая модель, к концу второго – готовый инференс".
Я решил довести обучение до ума: чуток подрегулировать параметры модели, learning rate и прочие вещи. По итогу на все той же ласточке VGG19 достаточно быстро довел до 76%, после чего успокоился и решил, что для тестового задания качество будет достаточным. Дальше — веселее, пришло время конвертации модели в ONNX.
Сразу же вылез тот факт, что модель я тренировал на изображениях размера 48x48, а такая интересная штука, как AdaptiveAvgPool2d (который и позволяет подавать модели фотографии изображения другого размера для обучения) конвертируется в ONNX только для изображений формата 224x224. В противном же случае возникает ошибка, которая в действительности сейчас практически не решается. Таким образом, модель сама по себе работает, а в ONNX перевести не вариант. Перепробовал 4-5 наиболее адекватных решений из обсуждений этой проблемы на гитхабе, ни одно из них не помогло (одно даже заработало, только вот точность упала до 50%).
Итог: время на исходе, часы потрачены, а модели нет. Tо есть, случилась ситуация как в этих детских играх с бросанием кубика и ходами по количеству выпавших очков, где перед финишем ты попадаешь на клетку, возвращающую тебя на самое начало. Делать нечего — решил учить другую модель, остановился на ResNet. Благо, там этот же AdaptiveAvgPool имел размерность 1х1, за счет чего не возникло проблем при конвертации (и это я проверил, разумеется, до обучения).
С помощью лома и какой-то там матери обучил модель, точность которой составила 72%. Падением на 4% я удовлетворился.
Далее — инференс. Сразу же при поиске, как подключить результат к вебке, нашел ONNX Runtime Web Demo от Microsoft, в котором по факту была задача из моего ТЗ. Практически тупо один в один: модель для классификации эмоций, позволяющая загружать картинки и включать вебку. Более того, обучена она была на том же датасете. Опять же, к гадалке не ходи, скорее всего при выборе задачи эту демку там же и нашли. Разумеется, я не стал далеко уходить от примера — установил Node JS, запустил у себя этот проект, вырезал из него все остальные модели, наладил связи и запустил свою.
В результате было что-то несусветное: счастливые люди превратились в дед-инсайдов, грустные – в агрессивных, и далее по списку. Написал инференс на Python, стал проверять на картинках — там все в порядке. Главное и единственное подозрение пало на входные данные. Подозрения подтвердились проверкой и выводом информации в консоль, дальше я примерно имитируя трансформации, которые производились с помощью PyTorch перед подачей в модель, дописал их на JavaScript, основываясь на значениях тензоров, и в итоге получил результат близкий, но все же не идентичный.
#offer
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - microsoft/onnxruntime-web-demo: demos to show the capabilities of ONNX Runtime Web
demos to show the capabilities of ONNX Runtime Web - microsoft/onnxruntime-web-demo
Тестовое задание: часть 3 ✍️
Давно я не выходил на связь, не хотел раньше времени говорить, чтобы не сглазить.
Обратная связь пришла уже через два дня: тестовое задание выполнено хорошо, я интересен команде, оставались лишь формальные вопросы. На днях выслали оффер, съездил пару раз с документами в офис, а уже сегодня вышел на работу.💼
P.S. как-то бездарно я веду канал: мол, буду продираться через тернии, а по итогу конвертация собеса в работу оказалась стопроцентной. Обещаю исправиться – теперь будет о чем рассказать уже изнутри.📂
К посту прикрепил пару фотографий с места событий📍
#offer #progress #path
Давно я не выходил на связь, не хотел раньше времени говорить, чтобы не сглазить.
Обратная связь пришла уже через два дня: тестовое задание выполнено хорошо, я интересен команде, оставались лишь формальные вопросы. На днях выслали оффер, съездил пару раз с документами в офис, а уже сегодня вышел на работу.
P.S. как-то бездарно я веду канал: мол, буду продираться через тернии, а по итогу конвертация собеса в работу оказалась стопроцентной. Обещаю исправиться – теперь будет о чем рассказать уже изнутри.
К посту прикрепил пару фотографий с места событий
#offer #progress #path
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥6👍1
Прошла первая рабочая неделя в компании, спешу рассказать (спустя почти две недели
Я устроился в ЮГПА в отдел ML-разработки. Таким образом, моя основная работа состоит в том, чтобы находить данные и обучать модели. В общем, это то, чего я хотел и искал. Наш продукт – CubicCV. Если кратко, то делаем систему видеонаблюдения с кучей плюшек сверху: от отслеживания людей в кадре, их пола и возраста до проверки износа оборудования, Face ID и иных полезностей.
Команда мне понравилась, все ребята очень приятные, руководитель отличный, местоположение и условия в офисе хорошие.
Что мне особенно понравилось – моя тестовая задача с определением эмоций оказалась не высосанным из пальца заданием, а реальной задачей на проекте. Поэтому, неудивительно, меня назначили на эту задачу, чтобы теперь уже не сумбурно, а адекватно её допилить. За пару месяцев до меня этой задачей занимался другой человек, даже сделал её, поэтому нужно было сравнить наши модели и выбрать лучшую.
В связи с тем, что я вышел на работу в пятницу, еще и в неполный рабочий день, я только и успел, что настроить рабочее пространство, познакомиться с людьми, получить доступы и сходить после работы в бар с коллегами буквально на часок.
Понедельник. Я открываю репозиторий, в котором другой человек уже решал ту же задачу. Первое ощущение – паника, потому что передо мной куча непонятного кода, логики, модулей, структур и иных вещей. Сам код в целом хороший, но при условии околонулевой документации и неочевидных взаимодействий разруливать было непросто.
Вроде начинаю чё-то робко понимать. К концу дня я изучил код вдоль и поперек, нашел датасеты для задачи, дальше оставалось действовать.
Жаль, что я веду канал не каждый день – эти 4 дня смешались, потому что я решал все ту же задачу. Расскажу чуть подробнее про поиск данных: сперва нашел замену своему прошлому датасету – FER+ – оказывается, есть хорошие люди, которые сели и переразметили старый FER, изменив классы для неправильных изображений, а также убрав изображения без лиц. Затем я нашел кусочек AffectNet на 40к картинок, а потом еще 5.5 тыс. изображений, найденных и размеченных каким-то святым человеком, потому что их качество оказалось на порядки выше того, что есть в FER и AffectNet.
После этого я, изучив чужой код, понял, что изначально мы обучали наши модели на разных данных, на разное число классов, с различными предобработками. То есть, модели вообще сравнивать смысла нет.
Таким образом, дальше предстояло сделать предобработку данных по подобию, но лучше той, что была ранее: выровнять лица по горизонтали (для этой задачи взял RetinaFace, чтобы на основе местоположения глаз осуществлять поворот).
Работа с данными удалась, я с подсказкой руководителя в очень нужный момент даже не успел упереться в одну нетривиальную проблему, и к утру понедельника брошенная мной обучаться на ночь с пятницы на субботу модель выдала 78.7% точности.
В сравнении с тем, что было ранее, прирост составил 10% (он, конечно, в целом не такой высокий, потому что я ведь обучал на меньшее число классов), а с моим личным результатом на то же число классов прирост составил около 5%.
В общем, результат очень неплохой, руководитель меня похвалил, так что я, можно сказать, сразу же себя проявил с хорошей стороны.
Попытки играться с архитектурами, параметрами и т.д. ни к чему особо не привели – простой ResNet18 решил эту задачу наилучшим образом, даже его модификации не показали никаких улучшений.
Теперь мне остается сконвертировать модели в ONNX, TRT и подбить код для удобного сравнения моделей между собой.
То ли еще будет...
#progress #hard
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2❤1👌1🏆1
Впервые мне предстояло решить задачу, всецело опираясь на чужой проект и модернизируя его код. Несмотря на то, что он по большей части был хорошим, я столкнулся с различными проблемами, и даже пару раз больно ударился. Собственно, ниже несколько выводов:
Это очень полезная штука, хотя бы ей надо пользоваться, если не пишешь документацию, потому что из нее можно понять примерный вид входа/выхода функции.
Может показаться, что документирование отнимает много времени, но на самом деле правило простое: написали функцию, сделали аннотации типов – сделайте и docstring, с учетом помощи IDE это займет 3-4 минуты и впоследствии сэкономит не менее 10-15 при повторном изучении кода. Также не забывайте проставлять однострочные комментарии в неочевидных местах, если такие есть.
Вот здесь я получил удар под дых, потому что при обучении модели постфактум один раз не увидел, что там вручную выставлено 7 классов, а не 5. Решение: сразу завести файл с набором констант, и в случае их зависимости друг от друга делать так, чтобы при изменении одной изменялись и зависимые.
Если в коде в различных файлах есть повторяющиеся функции или действия, их тоже необходимо минимизировать до нуля, чтобы при малейшем изменении не пришлось бегать между файлами и делать замены, или, не дай бог, вообще не найти до поры до времени возникшую из-за этого ошибку.
Казалось бы, настолько очевидные вещи, которые сами собой разумеются – зачем их вообще озвучивать? Я просто надеюсь, что прочитавшие и причастные узнали, согласны и помогут своим коллегам не умереть под завалами вашего же кода
#hard
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1👍1👌1
Сегодня я наконец расскажу о чем-то познавательном, а то о себе да о себе
Да и вообще наконец-то о чем-то расскажу, потому что уже давно ничего не писал, хотя событий было много.
В рамках задачи по классификации изображений возникает еще одна подзадача: нужно не только классифицировать объекты, но и сделать так, чтобы модель была инвариантна к вращениям, масштабу и иным премудростям. Никому, очевидно, не нужен классификатор, который перестает работать, если чуть повернуть или подвинуть изображение.
Конечно, для решения этой задачи уже давно существуют аугментации (вращения, изменения масштаба, цветового баланса изображений и т.д., которые случайным образом применяются к изображениям). Они позволяют как увеличить тренировочную выборку, так и за счет различных искажений сделать модель более устойчивой. Однако, у них тоже есть свой предел, при этом достаточно низкий. То есть, картинку можно повращать, условно, на 30 градусов туда-сюда, но если увлечься, то классификатор вообще перестает понимать, что от него хотят.
И вот тут, откуда не ждали, приходит на помощь STN
Если простыми словами: модель в себе содержит две нейросети, одна из которых отвечает за выравнивание картинки для другой, а вторая уже классифицирует объект. На самом деле, несложно представить себе сам процесс.
Вот посмотрите на этого парня:
А что, если я теперь скажу, что у STN совсем не одна архитектура? Есть сети, которые берут фичи с первых слоев классификатора себе в помощь и поворачивают именно их (cтр. 4 с различными архитектурами), а есть сети, которые вместо аффинных преобразований работают с перспективой или со сплайнами (тут готовая модель на PyTorch), также есть сети с вероятностным подходом.
Все это
К сожалению, не обошлось здесь и без проблем. Я подробнее опишу уже в комментариях, чем отличается суровая реальность от нежной виртуальности.
Тем не менее, штука перспективная, и весьма интересная, в том числе и для дипломной работы.
До новых встреч,
#hard #recommend #papers #learn #code
Please open Telegram to view this post
VIEW IN TELEGRAM
👏3
Представьте, что вы обучаете модель для решения задачи классификации. Вы уже нашли достаточное для вас количество данных, перебрали все интересующие вас архитектуры вплоть до SOTA последних трех лет, опробовали все мыслимые и немыслимые претрейны, провели работу с аугментациями, и так далее. А на выходе по итогу точность поднялась с 75 до 80%, и баста. А вас это вообще не устраивает (Разумеется, если устраивает, спокойно можете игнорировать дальнейший текст
Я оказался ровно в такой же ситуации при решении задачи по классификации эмоций. Данные подобраны и выровнены, чтобы получить сколько-нибудь оптимальное положение лиц. Практически все настраиваемые параметры перебраны, найдены оптимальные аугментации, архитектуры проверены, но 80% — это всё еще потолок. А что такое 80%? —Каждый пятый уйдет с неверным ответом.
Я думаю, что те, кто прошел через это, уже поняли, о чем пойдет речь — о данных
Все началось с того, что я вполне логично решил проверить пары true-predict для изображений, на которых были допущены ошибки. И если честно, я даже не догадывался, что все будет так плохо. Оказалось, что моя модель почти всегда выдавала более-менее правильные ответы, а изначальные классы вообще не соответствовали действительности. То удивленные люди были злыми, то умирающие от депрессии считались счастливыми, то попадалось одно и то же изображение с лейблами: веселый, грустный. А модели-то как понять, что от нее хотят? Вот то-то и оно.
#learn #hard
Please open Telegram to view this post
VIEW IN TELEGRAM