Pull to refresh

Comments 12

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

Ожидание: будем бороться с распознаванием сигналов светофора (см., например, https://www.autoweek.com/news/green-cars/a37114603/tesla-fsd-mistakes-moon-for-traffic-light/)

Реальность: пытаемся научить один-два скрытых слоя по уже заданному one-hot encoding восстанавливать однозначно заданную таблицу соответствия и кривовато экстраполировать вне обучающих данных.

Как учебно-методический пример, всё нормально. Но ПОЖАЛУЙСТА, не делайте вид, что так и надо, и уж тем более не фигачьте такое в продакшн.

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

У меня нет привычки писать комментарии, не осилив исходный материал.

Хотите больше конкретики - пожалуйста.

Основная проблема - из

модель, которая способна интерпретировать показания светофора, закодированные в виде числовых данных

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

Теперь касательно той задачи, которую Вы таки решаете. Во-первых, пространство исходов совсем невелико, и правильные ответы для каждого известны; их легко сгенерировать алгоритмически. Нейросети тут - не то что просто из пушки по воробьям, но ещё и с немалой вероятностью попадания из той самой пушки себе в ногу, если плохо сформированы тестовые данные. Если бы "магическая" функция отдавала значения от 0 до 1, было бы больше смысла. Но не с one-hot encoding. Во-вторых, Вы строите всевозможные метрики, графики loss function, но никак их не анализируете. В-третьих (и это ой как важно!), совершенно отсутствуют какие-либо соображения со стороны проектирования всей системы. Во многом это перекликается с первым замечанием, но есть и практические аспекты. Мой любимый пример - задумайтесь на минутку, должна ли функция потерь быть симметрична (иными словами, верно ли, что ложноположительные срабатывания так же плохи, как ложноотрицательный результат), и подумайте, почему Вы делаете то, что Вы делаете.

Ну и ещё одно замечание по мелочи - а Вы точно по одному кадру можете понять, мигает ли светофор?

Дальнейшее рассматриваю с позиций "читатель хочет вкатиться в формате "моя первая нейросеть". Пример выбран довольно удачный и наглядный. Не хватает пояснений.

Что могло быть лучше в сутевой части:

  • Размышления на тему, как выбор гиперпараметров влияет на результат работы. Пусть пример "игрушечный", но в нём на кону транспортная безопасность и жизни людей, в конце концов! Если известно, что могут случаться нестандартные ситуации, достаточно ли проведённого исследования на странных сочетаниях? Может, порог принятия решения в 0.5 (=авось, пронесёт) не самый удачный? Зависит ли это от того, сколько сигналов и их сочетаний разрешающие, а сколько запрещающие? Или того, с какой вероятностью они определены неправильно? Или того, что проезд на красный чреват худшими последствиями, чем встать на зелёном и никуда не уехать?

  • Комментарии на тему, какие результаты работы и обучения Вы считаете более удачными и почему. Даже не погружаясь в причины того, почему, например, функции потерь так отличаются - стало хуже? Лучше? Нужен второй слой-то? Почему, кстати, функция потерь не 0, а все приведённые метрики 1?

  • Автоматизация тестирования. Вот вы пообучали нейросеть на семи (!) примерах и пытаетесь распространить на 2^7 = 128 возможных вариантов. Как уже говорилось, если ненадолго задуматься, можно алгоритмически сформировать таблицу исходов. Стало быть, легко показать, как точность зависит, скажем, от размеров обучающей выборки. Тоже методологически полезно.

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

Если вы дошли до "магической функции" detect_traffic_light, то наверняка прочитали, что раздел "Применение к реальным данным" - это лишь один из возможных вариантов дальнейшего развития и в статье никоем образом не разбирается распознавание светофоров по фото/видео с помощью OpenCV. Если коротко, то в статье разбирается "внутренность" сети, то, как обучается, базовые принципы (о чём написано прямо во введении). И да, эта статья по сути "методичка для начального понимания", а не готовый продукт в "продакшн" для запуска беспилотного поезда.
Исходя из этого, причем здесь луна и Тесла?
Причем "а Вы точно по одному кадру можете понять, мигает ли светофор", если про распознавания объектов на фото нет речи?
Какая транспортная безопасность и жизни людей?
"Почему, кстати, функция потерь не 0, а все приведённые метрики 1" - если что, то в моих результатах функция потерь при длительном обучении стремится к нулю, см. графики.

Зачем писать много букв в комментарии "всё и обо всём"? Комментарий ради комментария? Не уверен, что вы поняли назначение статьи. Если хотите помочь читателям, так расскажите как надо, а не "как НЕ надо использовать нейронки"

Ясно, думать сложно.

Проехали.

Вообще я согласен с комментатором. Сложно оценить ценность статьи. Не указан размер выборки, также есть вопросы к итоговым значениям по всем метрикам единицы... Что это значит? Что модель работает идеально или что выборка небольшая и модель просто переобучилась на датасет? Также согласен с вопросом к определению мигающих сигналов по единственному кадру. Кажется, что подход выбран не верно. В качестве демонстрации проекта классификации лучше было выбрать что то более статичное, хотя бы марки авто или типы знаков

Господа, вы что издеваетесь? И вам также напишу, прочтите всю статью полностью, а не только название и конец.

  1. В статье размер обучаемой выборки указан: X = np.array([… и X_test_data

  2. Про результаты метрик равные единице тоже были написаны пояснения

  3. Причем здесь "определению мигающих сигналов по единственному кадру", если в статье НЕТ разбора процесса обработки фотографий и детекции объектов на них?

  4. "более статичное, хотя бы марки авто или типы знаков" аналогично п.3, я не разбирал процесс разбора фото

подождите... Я правильно понял, что все обучение производилось на 7 строках?

X = np.array([

    [1, 0, 0, 0, 0, 0],  # Зеленый

    [0, 1, 0, 0, 0, 0],  # Зеленый мигающий

    [0, 0, 1, 0, 0, 0],  # Желтый

    [0, 0, 0, 1, 0, 0],  # Желтый мигающий

    [0, 0, 0, 0, 1, 0],  # Красный

    [0, 0, 0, 0, 0, 1],  # Красный мигающий

    [0, 0, 1, 0, 1, 0],  # Красный и желтый

])

y = np.array([

    1,  # Зеленый: движение разрешено

    1,  # Зеленый мигающий: движение разрешено

    0,  # Желтый: движение запрещено

    1,  # Желтый мигающий: движение разрешено

    0,  # Красный: движение запрещено

    0,  # Красный мигающий: движение запрещено

    0   # Красный и желтый: движение запрещено

])

Вот это и есть ВСЯ выборка?

Да, вы совершенно верно всё поняли. Или вы считаете, что для понимания устройства и принципа обучения нейронной сети нужен датасет с миллионами строк, сотней признаков, десятки слоев, миллиарды параметров? Повторю также как и прошлому комментатору, что это "методичка для начального понимания, а не готовый продукт в "продакшн" для запуска беспилотного поезда"

ну тогда тут много вопросов) Даже по поводу 100 эпох и выбранного алгоритма)

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

Последнее время люди взъелись на любые упоминания нейросетей. Отсюда и такая реакция, на хорошую статью для новичков (форматирование кода только поправьте). У некоторых срабатывает триггер "нейросети -> плохо -> они неточные, глупые, так далее. Нужно написать об этом в комментариях!". Ничем другим объяснить такое не могу.

Sign up to leave a comment.

Articles