LINUX.ORG.RU
ФорумTalks

Ищу Репетитора по ML (keras, google colab,kaggle)

 ,


2

4

Я очень много занимался фронтенд разработкой, но надоело. Хочу попробовать ML, прошел общий курс от Andrew ng. Пробую решать задачи с kaggle в google colab, и очень часто возникает много вопросов на которые не так просто искать ответы в гугле.

Я никогда не занимался с репетитором по этому не совсем понимаю в каком формате это лучше сделать, и какая цена будет адекватная. Но ориентируюсь примерно на занятие по скайпу с оплатой в районе 10-15 долларов за час, несколько раз в неделю.

Перемещено leave из job

★★★

Давай бесплатно вопросы задавай в тред. На репетитора я не тяну, но теорию вроде как учил и использую даже. По поводу формата никто ничего не соображает (включая репетиторов и преподов в универах). Давай тебе задачу придумаем на пару годиков и ты будешь её делать, попутно изучая всё что надо. Язык какой? Исходя из этого будем стек технологий выбирать. Ну и что вообще ты знаешь про ML? Пока я набор слов (баззвордов) увидел.

Для затравочки вопрос, а какие алгоритмы ML ты знаешь? Что такое Spark? Hadoop?

ЗЫ

А что тебе интереснее из практического направления? ML и компьютерное зрение? NLP (обработка текстов написанных людьми для людей)? Звук и распознавание речи?

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

Ах да, про ЯП напиши. В ML огромный зоопарк и если ты и репетитор в разном, то будет очень больно, так как тебе ЯП надо будет сначала учить. 2 самых жирных основы это Java (вместе с scala) и Python. Есть ещё R извращенцы, но они больше когда статистика классическая в задаче есть появляются и чуток JS макак для рисования красивых визуализаций. Ну и всякая маргинальщина, когда в задачу влетают Julia и нишевые инструменты, вроде дедуктора (годен только для начального анализа в процессе обучения, ну или если данные уж слишком хорошие)

PPS

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

peregrine ★★★★★
()
Последнее исправление: peregrine (всего исправлений: 11)
Ответ на: комментарий от peregrine

Язык какой? Исходя из этого будем стек технологий выбирать. Ну и что вообще ты знаешь про ML? Пока я набор слов (баззвордов) увидел

Python мне вроде нравится (по сравнению с matlab) больше. Знаю про ML мало, курс Andrew ng прошел.

Для затравочки вопрос, а какие алгоритмы ML ты знаешь? Что такое Spark? Hadoop?

Spark hadoop слова не знакомые вообще. Знаю линейную регрессию, логистическая регрессия, обычные нейросети, сверточные нейросети (очень поверхностно), SVM (теория)

А что тебе интереснее из практического направления? ML и компьютерное зрение? NLP (обработка текстов написанных людьми для людей)? Звук и распознавание речи?

Пока что мне интересно все это.

Давай бесплатно вопросы задавай в тред.

тут проблема в том что у меня очень много мелких вопросов возникает. Ну например почему на kaggle который вроде как учебный сайт по ML всего 12 задач для новичков? Почему когда я применяю Dropout даже с большим значение (к примеру 99%) аккуратность моей модели все еще очень большая. Почему я должен руками разделять данные на обучающие и для валидации, вместо того чтоб функция keras.model.fit могла просто принять параметр сколько процентов данных использовать для валидации. Как поступать с большими данными (к примеру для cifar kaggle добавила 290000 фейковых картинок - и объем данных вышел просто огромный), почему feature column из tensorflow не умеет сама переводить строки в one hot encoding без того чтоб я ей давал список всех строк. Также я вижу много пакетов которые вроде делают похожие вещи, и не совсем понимаю что и где нужно использовать, например pandas/keras/tensorflow/sklearn

abs ★★★
() автор топика
Ответ на: комментарий от RedPossum

И все эти твои вопросы «почему X не делает удобно Y» решены пацанами из fast.ai в своей волшебной либе (обертка над pytorch).

RedPossum ★★★★★
()
Последнее исправление: RedPossum (всего исправлений: 1)
Ответ на: комментарий от abs

Ну например почему на kaggle который вроде как учебный сайт по ML всего 12 задач для новичков?

Потому что в ML нет простых задач для новичков. ML работает с тем что есть. А на практике у нас и даталейка может не быть, а быть разрозненный набор данных из кучи источников, включая новостные сайты и 90% времени ты будешь собирать данные и чистить их. И твоя задача будет понять откуда и какие данные ты можешь добыть.

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

Ну в scikit-learn так можно (почти так, от одной лишней строчки не станет плохо). Но в реальности проблема в том, что данные с которыми ты работаешь такие какие есть, а не идеальные. А это значит что там есть выбросы (их надо убирать, но не всегда это можно по смыслу выброса), значит деление на обучающую и тестовую группу не случайно и ты делишь их по какому-то принципу (например учишь на самых «правильных» данных, где меньше аномалий) или соблюдаешь баланс между категориями на которые тебе надо классифицировать данные. Вот есть у тебя база из 1000 грибов и признаков, 100 смертельно ядовитых, 200 ядовитых, но не смертельно/очень горьких и 700 нормальных. Ты не можешь взять и учить по 90% этой базы нейронку, если тебе важно чтобы она надёжно предсказывала ядовитость. Тебе надо либо искуственных грибов насинтезировать (да, так тоже можно и так делают в случае маленьких датасетов), либо сократить выборку до 100 смертельно ядовитых, 100 очень горьких и 100 съедобных, иначе у тебя перекос будет. С другой стороны если тебе надо чтобы наибольшее количество грибов определялось правильно, то надо брать 10% от всей исходной выборки.

Как поступать с большими данными

В хадуп пихать на кластер и пусть варятся. Очень дорого, но делать нечего. Опять можно отобрать столько данных, сколько тебе надо (у меня был грязный датасет с запросами пользователей на несколько миллионов записей, после чистки пригодных к решению задачи записей стало 30 000).

почему feature column из tensorflow не умеет сама переводить строки в one hot encoding без того чтоб я ей давал список всех строк

Потому что это поведение должно быть опциональным, нет? Ну и да, как ты в one hot encoding собрался переводить данные, когда не знаешь сколько у тебя вариантов данных?

peregrine ★★★★★
()
Ответ на: комментарий от RedPossum

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

peregrine ★★★★★
()
Последнее исправление: peregrine (всего исправлений: 1)
Ответ на: комментарий от abs

например pandas/keras/tensorflow/sklearn

Тут почти как в зоопарке веба. Ну если коротко, то pandas для того чтобы работать с csv и вообще таблицами, sklearn для того чтобы потыкать модельки и примерно понять что нам лучше (random forest, регрессия, нейронка) в идеальном случае тут и получаем готовое решение нашей задачи, но всё может быть плохо и надо делать своё решение, тогда берётся keras или tensorflow в зависимости от того, насколько низко надо производить изменения. В худшем случае берётся C++ и пишется своя нейронка (может ты какие-то хитрые нейроны захочешь с очень не тривиальной функцией активации), а может решишь вообще какую-то функцию возбуждения нейрона делать в довесок к тому что есть (свою теорию делать нейросетей).

peregrine ★★★★★
()
Последнее исправление: peregrine (всего исправлений: 2)
Ответ на: комментарий от peregrine

Потому что в ML нет простых задач для новичков.

Как тогда учится? Я вчера закончил titanic с результатом 75% правильных ответов, какую задачу брать следующей?

abs ★★★
() автор топика
Ответ на: комментарий от abs

Как тогда учится?

Имея общематематическую базу методом ныряния по уши в говно. Кто выплывает — молодец, кто не выплывает не идёт в биг дату. Как думаешь, почему там людей не хватает нормальных (кто что-то соображает и умеет работать)? Я не знаю про титаник, это всё уровня лаб, т.е. не о чём. Давай нормальную задачу уровня диплома решать хотя бы. Вот тебе пример, есть ютубчик, на ютубчике есть болтуны, которые много болтают. Задача: получать их болтовню без фонового шума (распознавать не надо, надо шумы давить) (музыка там, сосед с перфаратором).

peregrine ★★★★★
()
Последнее исправление: peregrine (всего исправлений: 1)

Точно так же как в разработке взять какую то интересную и полезную тебе задачу или проект и начать решать при помощи гугла

Например можешь написать login manager для linux-а с поддержкой распознавания лиц

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

Сравнение лиц лучше взять готовое отсюда например https://github.com/TreB1eN/InsightFace_Pytorch

А нахождение реализовать самому обучив например регрессию на одно лицо используя CNN (или же имплементировать алгоритм YOLO который посложнее, но позволяет находить много лиц), соответвенно гуглишь код алгоритмы и датасеты и т д, в результате получишь проект в резюме и довольно многому научишься

drjerk
()
Ответ на: комментарий от peregrine

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

abs ★★★
() автор топика
Ответ на: комментарий от abs

Ну так нырять надо во всё это. Сам по себе уровень не поднимется. Можешь учиться пойти в магу на биг дату, там тебе разжуют как смогут, но дадут что-то похожее пилить, с аудио, например, у меня трудность в том, как его представить для нейросети, надо читать сначала, т.е. я сходу не слеплю. И не стесняйся искать статьи на английском и русском по применении ML-я в твоей задаче. Скорее всего кто-то уже делал что-то похожее, может хуже, а может и лучше. Готовый код не надо, надо понимать что и как происходит. Я подумаю и накидаю в тред то, что критически важно понимать чтобы big data изучать.

Пока на первой мысли это следующие вопросы:

1. Какие функции активации есть у нейронов? Какие особенности есть у этих функций, что такое область чувствительности? Когда 0 это очень-очень плохо, а когда просто плохо? А 1?

2. Сколько выходов должно быть у нейросети? А сколько входов? По какой формуле считать количество нейронов для выхода?

3. Что такое автокодировщик и каскадирование? Как это связано с deep learning? А какие другие примеры каскадирования, кроме глубинных нейронных сетей есть в ML? Почему глубинная нейронка лучше, чем «плоская»/однослойная, ведь формально однослойная может быть научена точно так же, как и глубокая? Как выбрать количество нейронов внутри сети? Что такое нейронный газ? Обучение с учителем и без учителя.

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

5. Генетические алгоритмы. Нечёткая логика.

6. ТАУ. Понятие сходимости. Ошибки. (Вроде само по себе не ML, но понимать надо).

7. Байесовский наивный классификатор.

8. Марковские сети, марковские цепи, скрытые марковские модели.

9. Свёрточная нейронная сеть.

10. Жадные алгоритмы

11. Даталейк, витрина данных.

12. Немного полезных технологий (SQL, Python)

13. Полезный софт: OpenRefine (серьёзная штука), Deductor, Loginom (это отечественные продукты, для обучения не так уж и плохи, проприетарщина, для обучения бесплатно ЕМНИП, да и потыкать можно данные через них для начала). Jupyter Notebook (серьёзная штука).

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

peregrine ★★★★★
()
Последнее исправление: peregrine (всего исправлений: 1)

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

Deep Learning © хватит всем (для начала).

Artificial Intelligence / Machine Learning / Software © для практических экспериментов.

Ищу Репетитора по ML

«Эй, гражданина! Ты ML не ходи, а то Big Data башка попадёт, совсем мёртвый будешь!» // Василий Алибабаевич :)

quickquest ★★★★★
()
Ответ на: комментарий от peregrine

с аудио, например, у меня трудность в том, как его представить для нейросети

Кусочно-временнЫе пакеты спектрограмм хорошо распараллеливаются и отображаются на вход нейросети, например ©.

quickquest ★★★★★
()
Ответ на: комментарий от quickquest

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

peregrine ★★★★★
()
Ответ на: комментарий от peregrine

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

RedPossum ★★★★★
()
Ответ на: комментарий от peregrine

А подскажи что такое pandas dataframe head ? эта функция каким-то образом «рисует» таблицу в google colab - это же не просто консольный вывод (std out) ?

abs ★★★
() автор топика
Ответ на: комментарий от abs

Этот метод возвращает первые n строк таблицы в переменную или на печать. В google colab скорее всего этот объект печатают как-то, тип сам проверишь, скорее всего pandas.dataframe, но я не уверен, надо смотреть. Ну а так как google colab (я не пользуюсь им, могу наврать, мне если своих мощностей не хватает сервер предоставляют выделенный) это обёртка над юпитером, то вполне возможно обернули консольный вывод, хотя могли и свой велосипед придумать, но маловероятно. Вообще Pycharm поставь, ты в питоне плаваешь, а там отладчик отличный и типы покажет и методы...

peregrine ★★★★★
()
Последнее исправление: peregrine (всего исправлений: 2)

Пройди ODS и/или курс по ML от яндекса на курсере. У обоих есть community (в том числе чатики по курсам), там тебе вопросы разжуют. Не усложняй.

phoen ★★
()
Ответ на: комментарий от peregrine

Чтобы в pycharm работать с данными на уровне jupyter’a надо покопаться с интеграцией первого во второе всё таки) На входе проще взять anaconda и не страдать.

ТСу рекомендую на старте в тонкости хадупа не лезть, утонет в data engineering вместо ML

phoen ★★
()
Последнее исправление: phoen (всего исправлений: 1)
Ответ на: комментарий от phoen

В пичарме есть встроенный юпитер, но в том, который платный вроде как. А ТС-у рано в юпитер, он не может в питон.

peregrine ★★★★★
()
Ответ на: комментарий от phoen

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

peregrine ★★★★★
()
Ответ на: комментарий от peregrine

Мне приходилось встречать студентов которые в свою очередь сильно ниже среднего в разработке, но норм в ML и прогают 90% времени в юпитере.

Я к тому что всякие keras’ы, tenserflow, pandas/modin и даже numpy к питону имеют довольно опосредованное отношение т.к. являются своего рода обёртками над C’ым кодом. На выходе получаем гору новых типов, местами инородный синтаксис и почти полное отсутствие того же ООП в конечном коде. Это про ML на питоне, когда ясделие переписывается под spark - там уже все, как правило, нормально.

phoen ★★
()
Последнее исправление: phoen (всего исправлений: 2)
Ответ на: комментарий от peregrine

Подскажи, у меня есть вот такая задача https://www.kaggle.com/c/jigsaw-toxic-comment-classification-challenge/leaderboard

В данных есть такие колонки как id, text, toxic, я создаю датасет где text это входные данные, а toxic выходные

Но что мне в этом случае делать с id, которые не является ни входным ни выходным. При этом в финале для kaggle нужно отправить CSV в формате

id toxic

Раньше я делал это примерно так

result = model.predict(XTest)
result = np.argmax(result, axis=1)

out = np.column_stack((range(1, result.shape[0]+1), result))
np.savetxt('submission.csv', out, header="ImageId,Label", 
            comments="", fmt="%d,%d")

Но тогда imageId был просто порядковый номер, а в моем случае там просто рандомные айдишники

Я еще и перемешиваю данные (нужно ли?)

def df_to_dataset(dataframe, shuffle=True, batch_size=100, is_train=True):
  dataframe = dataframe.copy().sample(frac=1)
  if is_train:
    labels = dataframe[['toxic', 'severe_toxic', 'obscene', 'threat', 'insult', 'identity_hate']]
    # labels = [
    #   dataframe.pop('toxic'), 
    #   dataframe.pop('severe_toxic'),
    #   dataframe.pop('obscene'),
    #   dataframe.pop('threat'),
    #   dataframe.pop('insult'),
    #   dataframe.pop('identity_hate'),      
    # ]
  del dataframe['id']

  comment_text_matrix = tokenizer.texts_to_matrix(dataframe.comment_text)
  if is_train:
    ds = tf.data.Dataset.from_tensor_slices((comment_text_matrix, labels))
  else:
    ds = tf.data.Dataset.from_tensor_slices((comment_text_matrix))
  ds = ds.batch(batch_size)
  return ds
abs ★★★
() автор топика
Последнее исправление: abs (всего исправлений: 1)
Ответ на: комментарий от abs

Смотри, я не хочу сейчас заходить через свой основной аккаунт в kaggle, но в общем случае данные перемешиваются чтобы избежать ошибок связанных с порядком поступления данных (я не знаю какая у тебя модель и как ты считаешь, ну и тестовая выборка тоже случайно (на самом деле не всегда, но практически всегда, исключение когда есть контрольная выборка) тобой выбираться должна, а вообще есть кроссвалидация модели). После того, как ты помешал данные с ID-шниками, в зависимости от того, чем ты саму модель делаешь ты либо избавляешься от id-шников только если есть гарантия в порядке выхода данных (а потом прикрепляешь в правильном порядке id-шники), либо действуешь согласно инструментам твоей обучающей библиотеки (https://stackoverflow.com/questions/48653977/ignore-a-column-while-learning-b... например для scikit-learn), конкретно для твоей обучалки гуглишь по запросу $название_библиотеки exclude id column

Глянул твой код, у тебя тензорфлоу, значит смотри сюда.

peregrine ★★★★★
()
Последнее исправление: peregrine (всего исправлений: 1)
Ответ на: комментарий от abs

Пройди хоть один курс из тех что озвучил, не та сфера чтобы брать «с наскока». Это не только про программирование, я серьезно. И держи в голове что твоими конкурентами у работодателя будут студенты 5-6 лет предметно изучавшие эту сферу. Изучишь, потом kaggle с титаниками. Репетиторы, если это не Бабушкин - не помогут. Я все сказал (с)

P.s Сначала нужно хорошо вкурить пандас, можешь написать мне на phoenmaster(собака)gmail.ком. Есть идея как тебе помочь.

P.p.s Долбаните уже в @maxcom чтобы сделал Лс и барахолку, задолбали уже эти школьные шифровки.

phoen ★★
()
Последнее исправление: phoen (всего исправлений: 2)
Ответ на: комментарий от phoen

Пройди хоть один курс из тех что озвучил,

А Andrew ng на курсере не тоже самое «Пройди ODS и/или курс по ML от яндекса на курсере»?

abs ★★★
() автор топика
Ответ на: комментарий от peregrine

А можешь еще подсказать по поводу аккуратности в keras?

Она неправильное вычисляется, и я не могу разобраться в чем проблема. Для валидации и обучающих данных у меня 99% + аккуратность - что не правда, так как реальное число правильных ответов (после отправки на kaggle) ~50%

Я пытался разобраться вот в этом https://www.tensorflow.org/api_docs/python/tf/keras/metrics/BinaryAccuracy пробовал разные, но так и не понял.

У меня labels это multihot encoding, типа такого - 0 1 0 1 1 0

https://colab.research.google.com/drive/1kSH692XFgPYveyj3O6fIvoXcw18mr8iu?usp=sharing

abs ★★★
() автор топика
Ответ на: комментарий от peregrine

Я понял почему аккуратность так странно себя ведет - данные очень неравномерные и предсказывая всегда 0 для всех классов будет как 96% правильно

abs ★★★
() автор топика
Ответ на: комментарий от peregrine

Я тут попровал jupeter + PyCharm = и работает это как дерьмо(!) по сравнению с google colab. Вот хочу уточнить, это так и должно быть, или же я что-то не так делаю, и этим можно нормально пользоваться

abs ★★★
() автор топика
Ответ на: комментарий от abs

Не знаю. Вероятно да, если пичарм платный (в бесплатном на котором я сижу этой фичи нет, но мне и графики привычнее рисовать через matplotlib, тем более что из коробки там и увеличивать можно не плохо нужные места), так что особой фичи я не вижу в колабе и юпитере для себя (tqdm и в консольку умеет), рефракторинг кода важнее, учитывая что в фиговине которую я сейчас пишу 30 Python файлов в каждом из которых напихано по несколько классов и определено по несколько функций (в среднем по 10 функций или по 3 класса на файл). Т.е. всего имеется около 100 функций и 60 классов (да, надо бы всё в классах написать, но там и так пока не стабильно всё очень, часть функций выкину со временем, так как они времяночки, так что и так сойдёт). В любом нотебуке замучаешься всё это переименовывать правильно.

ЗЫ

А за год с момента начала этого проекта, то сколько говна сидя по вечерам не каждую неделю даже, уже набралось, блин. Похоже пора нормально уже всё писать, а то утону.

peregrine ★★★★★
()
Последнее исправление: peregrine (всего исправлений: 1)
Ответ на: комментарий от peregrine

А как мне установить tensorflow 2.2.0 (Я хочу эту версию потому что она была в colab и там мой код работал, а на моем ноуте при версии 2.0.0 не работает)

Проблема в том что в conda есть только 2.0.0 версия, а вот в pip есть 2.2.0 я попробовал ее установить вот так

name: tensorflow
 
dependencies:
    - python=3.7
    - pip>=19.0
    - jupyter
#    - tensorflow=2.2.0
    - scikit-learn
    - scipy
    - pandas
    - pandas-datareader
    - matplotlib
    - pillow
    - tqdm
    - requests
    - h5py
    - pyyaml
    - flask
    - boto3
    - pip:
        - bayesian-optimization
        - gym
        - kaggle
        - tensorflow==2.2.0

Но когда я запускаю jupeter print(tf.__version__) все еще пишет 2.0.0

abs ★★★
() автор топика
Ответ на: комментарий от abs

Удали сначала версию с conda. Потом удали из pip-а (проверь что тензорфлоу нет в системе из репы, например) и ставь заново. Добро пожаловать в ад из пакетных менеджеров, те кто его создал - злодеи.

peregrine ★★★★★
()
Последнее исправление: peregrine (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.