Как стать автором
Обновить
150
0
Vladimir Iglovikov @ternaus

CEO

Отправить сообщение
А вот ещё такой вопрос: «Сколько времени на итерацию при тренировке различных сетей уходит на GTX 1080 с caffe?»

Интересует порядок величины, чтобы я знал, пора ли мне апгрейд делать.
Мне вполне хватит куска про python с убунтой с кратким описанием того, что данный файл/функция делает.
Вопрос: Вы не могли бы выложить код вашего решенния?

Комментарий: Усреднение 26 fine-tuned VGG16 с аугментацией, где подвыборки выделялись по водителям => 0.19 Public Leaderboard, 0.22 Private LeaderBoard

Это соревнование очень интересное в том смысле, что влоб cross validation не работает. Но при желании можно найти подход. Мне оно тоже очень понравилось, хотя я изрядно оверфитил и меня в результате кинуло на 56 мест.
Исходные картинки обрезались вручную. И в данной задаче это нормально, потому что камера не смещается, не поворачивается. Если бы камера поворачивалась:

Подход 1:
Скармливать сети необрезанные картинки и дать сети разобраться самой к чему => могут быть проблемы со сходимостью и итоговой точностью. (В этой задаче скорее всего проблем не будет, но надо прверять)

Подход 2, двуступенчатый:
  1. Вручную отметить координаты моста на нескольких картинках.(100+) Для этого есть специальные инстументы, которые этот процесс упрощают.
  2. Натренировать сеть, которая будет находить мост на картинках (Задача локализации)
  3. Натренировать вторую сеть, которая будет классифицировать состояние моста по найденным на предыдущем шаге мостам(Задача классификации)


Какой подход выбрать? Надо пробовать оба. Скорее всего первый будет хорошо работать и заморачиваться на двуступенчатую схему не надо. Хотя бывают задачи, где только второй способ будет давать адекватную точность. Пример: классификация китов по фотографиям с вертолёта, где воды на картинке много, кита мало, все фотографии с различных углов и высот, да и киты статично ну позируют. И ко всему прочему фотографий мало.
Спасибо. Это я не учёл. На неделе дойдут руки и я проверю как логистическая регрессия будет работать на самих изображениях, без Canny.
Поправка.

Про оценку сверху не то сказал. Обычно, когда говорят про нейронные сети говорят про число весов — потому, что их количество важно в силу того, что именно они являются свободными параметрами, которые надо натренировать. То есть оценка сверху не 10^8 нейронов, что очень много, а 10^8 весов, что тоже очень много, но осязаемо. Так что в если мерить сложность сеть в нейронах — пусть будет: «Я могу для это задачи нарисовать сеть с 10^4 нейронами и которая не будет на этой задаче оверфитить.» (При большем числе она у меня в пямять GPU не влезет.)
И использую python. Есть актуальные библиотеки под R, C++

В перспективе знаю, но пусть будет python, потому что у всех основных библиотек кроме Torch, есть его поддержка.

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

Оценка сверху — чёрт его знает. Сеть с 10^8 нейронами я для этой задачи создать смогу так что она не будет оверфитить. Наверно можно и больше. Но зачем?

Название я выбрал похожее на название поста darkk чтобы подчеркнуть преемственность.
  • ZeroPadding добавляет нули по краям изображения.
  • Какая архитектура для этой задачи будет хорошо работать? => пачка слоёв которые отвечают за извлечение признаков. Часто это бутерброд из ZeroPadding => Convolution => MaxPool, за которыми следует бутерброд из Dense и Dropout, которые по этим извлечённым признакам и пытаются ответить на вопрос(в нашем случае это разведён мост или нет).
  • На практике, я просто взял сеть с которой работал последние пару месяцев, и упростил, утоньшив бутерброды слоёв описанные выше.
Были бы данные и за осень я бы может и по-другому делил. Чисто случайное разделение мне в этой задаче не нравится. Смежные картинки в train/val/test — это плохо и неправильно.

Скорее всего делил бы по дням. Не последовательно, как в посте, а случайным образом.
Безусловно заморачиваться с установкой библиотек(cuda, theano, keras) и штудировать туториалы по keras чисто для этой задачи с мостами, резона нет. Тем более, что шутдироваться будет как раз примеры по MNIST. И данную задачу я рассмотрел как пример.

Но!
  • Для меня нейронные сети это один из стандартных инструментов и на написание кода, который, собственно, и отвечает за нейронные сети ушло минут 15. А пытаться разбираться с тем как призаки извлекать из изображений вручную, у меня бы ушло гораздо больше времени просто потому, что это не очень знакомая для меня тема(Я знаю теорию, но не использую их на практике по работе или для соревнований на kaggle.com). А у кого-то наоборот, они уже знают эти методы, но не большого опыта разботы с нейронными сетями. Поэтому для кого-то «дёшево и сердито» — это несколько строк на питоне, а для кого-то это вбросить всё в нейронную сеть и дать ей самой разобраться.
  • Если задачу усложнить и дать 20 мостов, для которых изображения с 1000 камер, и камеры ещё и движутся вышеописанный код, практически не изменится, потому что признаки излекаются автоматически. А вот методы, где признаки извлекаются вручную из несколько строк на питоне скорее всего превратятся во что-то большое злое.


В общем под разные задачи — разные инструменты. И в данной задаче можно запросто справится и без нейронных сетей. Да и классический PCA для извлечения признаков с последующим применением SVM тоже скорее всего замечательно сработает.

То, что accuracy на train ниже чем на validation — это следствие использования dropout для регуляризации.
  • Идеологически мы как раз и хотим консервативную оценку, то есть смещённую по погоде и всему остальному.
  • Камера делала снимки с высокой частотой, поэтому очень много практически одинаковых картинок, а иметь одинаковые картинки в train/val/test — это плохо. Data Leak => Overfitting
  • А по факту именно для этой задачи как именно разбивать в принципе не важно. Картинки очень похожи друг на друга, любой тип разбиения даёт примерно одинаковое распределение. Мне просто хотелось получить большую точек в том графике, на которому мы сравниваем предсказания с правильным ответом.

Также есть замечательный плагин, который называется Key Promoter. Каждый раз, когда вы куда-то щёлкаете мышкой он выводит табличку с указанием комбинации клавиш, которая могла бы это действие выполнить. Он скорее помогает по менюшкам быстрее прыгать, а не по тексту, но тем не не менее.

P.S. На работе OS X, дома Linux. У меня мозг ломается при переключении с одних комбинаций клавиш на другие.
Лучше всего и побольше. :) Вы выложите, что есть размеченного на данный момент. 3GB jpeg-ов о мосте Александра Невского — с этим однозначно можно работать.
  • А всё-таки хотелось бы увидеть какие-нибудь циферки, оценивающие точность модели. LogLoss, accuracy, ROC_AUC, и т. д,
  • Если поделитесь размеченными изображениями(больше — лучше) готов поиграться со свёрточными сетями, и рассказать, что из них для этой задачи можно получить.(ну и код, понятно, выложить)
Спасибо.

Всe равно ошибку выдает.

— ~/packages/clang-omp/build/bin/clang++ test.cpp -o sample -fopenmp
test.cpp:3:10: fatal error: 'iostream' file not found
#include ^
1 error generated.

А как у R с нейронными сетями? Я знаю про пакет H2O

Там есть что-нибудь уровня keras?

P.S. На тему MATLAB: Если во время интервью, выясняется, что компания использует MATLAB для Data Science — идти туда не надо.
В учебке у нашего командира взвода был специальный гаджет под названием ТУМПУС = Турбо Ускоритель Мозговых Процессов У Солдат. По факту — это была деревянная палка, которой он прикладывал по пятой точке в случае очередной провинности. Мозговые процессы однозначно ускорялись. Но тут, видится мне, инстинкт самосохранения влючался, боль она очень сильный учиталь. Это я к тому, что, возможно, часть влияния стимуляции электрическим током как-то связяна с тем, что состояние нестандартное и инстинкт самосохранения подключается со всей своей тяжёлой артиллерией, то есть эффект от стимуляции должен уменьшаться со временем, по мере привыкания и увеличения зоны комфорта и до этого состояния.

С другой стороны, мне импонирует точка зрения, что если рассматиривать упрощенную версию мозга, как нейронную сеть, где сигнал при forward-propagation, тогда получается что электирческое возбуждение — ни что иное как усиления bias. А вот это уже интересно в том смысле, что из этого может выйти очень даже интересная регуляризация. Надо будет прикрутить к какой-нибудь из моих нейронок.

P.S. Не исключено, что стимуляции от Тумпуса мне хватило на многие годы, в том числе и для защиты кандидатской по физике в буржуйском вузе.

Информация

В рейтинге
Не участвует
Откуда
San Francisco, California, США
Зарегистрирован
Активность