Это не проблема. Человек, который научился решать NLP задачи с помощью LSTM, легко и быстро освоит и трансформеры, и сверточные сети, и любой близкий инструмент.
Совпадение ответов — недостаточный критерий качества. Например, я однажды тоже намерял, что торч в N раз медленнее, чем onnxruntime, а потом обнаружил, что с настойкой трединга накосячил.
Сравнение на Mobilenet + CPU выглядит подозрительным: я верю, что вы крутые, но не может pytorch отставать в 10-20 раз. Допускаю, что тест не вполне корректный.
Было бы интересно еще увидеть сравнение по скорости инференса с openvino/tensorrt/onnxruntime.
Наконец, есть вопрос — как у вас дела с конвертерами? Например, можно ли натренировать модель на торче, сконвертить в onnx и инферить на neoml?
Вопрос про множественное наследование напомнил другую ситуацию на собеседовании, рассказываю со слов коллеги.
Вопрос интервьювера: Что будет, если написать такой код?
В unsupervised learning у нас обычно есть просто какие-то данные, и мы ищем в них структуру — например, кластера или какое-то более компактное представление.
В reinforcement learning сценарий предполагает, что есть агент, который взаимодействует со средой и получает какое-то вознаграждение; модель стремится выбирать такие действия, которые максимизируют вознаграждение.
Собственно, существует две больших группы методов обучения нейронной сети. Обучение с учителем и обучение без учителя.
Скорее это две группы методов машинного обучения (а нейросети — это подмножество ML). Как раз сети обычно учат в supervised/self-supervised парадигме, а под unsupervised часто имеют в виду кластеризацию и другие менее модные методы.
Пример с погодой, который мы рассмотрели выше, относится к группе методов обучения с подкреплением (без учителя).
Unsupervised learning и reinforcement learning — две сильно разные вещи.
Наконец, стоит отметить, что подбирать веса для нейросети генетическим алгоритмом — неоптимально (не говоря уже о том, что для этого и Tensorflow не нужен). Почти любая неигрушечная модель слишком сложна для этого, потому обычно используются какие-то вариации на тему SGD.
Действительно, зачем разрешать этому биомусору играть? И уж точно эти людишки недостойны того, чтобы в игре позволяли пропускать опасные для них сцены или делали опцию «ослабить визуальные эффекты». /s
Если сравнивать с 3d-датасетами, то полно :) Качество может действительно быть неидеальным. Ну и набора объектов конкретно для вашей задачи может не найтись, это нормально — почти все неакадемические задачи в итоге требуют собственную разметку.
Спасибо, крутой гайд!
Добавлю дата поинт насчет onnx-runtime: с простыми сетями из коробки завелось на серверном CPU и на CUDA, все хорошо; быстрее, чем traced модель из Pytorch, а процедура выкатывания в прод аналогичная, все очень просто.
Вы изобретаете велосипед. Для поиска похожих изображений не нужно руками считать статистики цветов, нужно использовать или pHash, или representations из специально обученных нейросетей. Для эффективного поиска по векторам — всякие Annoy и Faiss.
Модели, обученные на imagenet, выдают удивительно хорошие вектора для большинства задач. Конечно, можно делать свой feature extractor и добиться лучшего качества, но если ваша задача не слишком специфическая, я бы не заморачивался. Заниматься этим стоит только если у вас есть действительно много данных для обучения, а метрики итоговой модели вас не устраивают.
Как его продать? Там наверняка используется куча внутренних гугловских технологий, и оторвать продукт от инфраструктуры, не переписав все заново, будет невозможно.
Это не проблема. Человек, который научился решать NLP задачи с помощью LSTM, легко и быстро освоит и трансформеры, и сверточные сети, и любой близкий инструмент.
При найме грузчиков тоже не надо ставить себя выше нанимаемых
Leopards Ate My Face When I Voted For The Leopards Eating People's Faces Party
А где можно почитать про ONNX? neoml.readthedocs.io/en/latest/search.html?q=onnx ничего не находит.
Было бы интересно еще увидеть сравнение по скорости инференса с openvino/tensorrt/onnxruntime.
Наконец, есть вопрос — как у вас дела с конвертерами? Например, можно ли натренировать модель на торче, сконвертить в onnx и инферить на neoml?
Вообще да, в питоне почти везде dict под капотом, в т.ч. для методов:
Вопрос про множественное наследование напомнил другую ситуацию на собеседовании, рассказываю со слов коллеги.
Вопрос интервьювера: Что будет, если написать такой код?
Коллега ответил (и по-моему идеально): не пройдет код ревью.
В reinforcement learning сценарий предполагает, что есть агент, который взаимодействует со средой и получает какое-то вознаграждение; модель стремится выбирать такие действия, которые максимизируют вознаграждение.
Unsupervised learning и reinforcement learning — две сильно разные вещи.
Наконец, стоит отметить, что подбирать веса для нейросети генетическим алгоритмом — неоптимально (не говоря уже о том, что для этого и Tensorflow не нужен). Почти любая неигрушечная модель слишком сложна для этого, потому обычно используются какие-то вариации на тему SGD.
Добавлю дата поинт насчет onnx-runtime: с простыми сетями из коробки завелось на серверном CPU и на CUDA, все хорошо; быстрее, чем traced модель из Pytorch, а процедура выкатывания в прод аналогичная, все очень просто.
Более того, алгоритмы сразу с инфраструктурой доступны, например, в github.com/jina-ai/jina