Комментарии 7
Вот умеют в Tensorflow навести сложность на ровном месте. Keras как раз хорош тем, что в свое время упростил начальные шаги в нейронных сетях. Набираете массив примеров, скармливаете его Keras, тот какое-то время думает, и готово. Потом можете показывать ему по одному или пачками примеры, а он будет выдавать для них предсказание сети.
Но все это разбивается о реальность. Нейросети стали такими сложными, что через одну используют cuda компилируемые части и custom objects, которые не сохраняются в Keras моделях. И все, приходится тащить кучу python кода с каждой моделью, который с каждой новой версией Tensorflow превращается в тыкву (даже не обязательно мажорной, минорные версии тоже часто ломают обратную совместимость). И все это в основном заслуга Tensorflow. Сейчас большая часть нейросетей, написанных на Tensorflow даже несколько месяцев назад, уже не запускаются. В том числе с их официальных репозиториев. Киберпанк, который мы заслужили.
Шило на мыло… Хотя они оба постепенно приходят к некоему общему виду. И это не считая внешних попыток объединения, вроде ONNX.
Встроенный Keras в Tensorflow это очень правильное решение. Он там давно был, просто плохо поддерживался (версия отставала и не все было). А потом они вроде были наняли разработчика Keras на какое-то время, чтобы он активнее занимался интеграцией. Или из-за Eager поднапряглись. В любом случае, сейчас он там нормально функционален.
Но все то наследие, которое было наработано на Tensorflow за последние несколько лет (предобученные нейросети, исходники научных работ и т.д.) уже через несколько месяцев будет безвозвратно потеряно.
Там дело не только несовместимости версий самой Tensorflow. Оно тянет за собой другие проблемы — с драйверами для GPU, с компиляторами CUDA и т.д… Спустя некоторое время не удается запустить сохраненную нейросеть даже в виртуальном окружении в питоне. Приходится городить совсем изолированную систему, а данные в нейросеть и обратно гонять через какие-нибудь вебсокеты. Ужасный геморой. Надо было изначально делать что-то вроде аналога .exe, чтобы сохраненная нейросеть содержала в себе все что нужно и могла работать всегда в будущем. А там сейчас даже в одном Tensorflow зоопарк форматов сохранения. И они продолжают плодить новые.
В Керасе под капот приходится заглядывать, только когда что-то отваливается в новой версии. А в Торче из под капота никто никогда и не вылезал.
Сейчас большая часть нейросетей, написанных на Tensorflow даже несколько месяцев назад, уже не запускаются. В том числе с их официальных репозиториев.
Требования по версиям пакетов ни кто не отменял. И данная проблема у TF и её каверов есть с момента выхода «следующей» версии. И это правильно. И к этому как и ко всему хорошему быстро привыкаешь. И следует помнить что требования по версиям рекурсивны вплоть до уровня железа :)
Ну да, только виртуальные окружения и спасают. Хотя там есть проблемы с разделяемыми ресурсами, такими как установленные версии Cuda. Которые тоже не очень продуманы, т.к. путь к текущей прописывается в PATH.
Но я не об этом. А в том, что эти фреймворки возникли очень быстро на волне хайпа, поэтому о долговременной совместимости тогда никто не думал. Лепили на коленке побыстрее и все. А теперь мы расхлебываем последствия.
Если бы лепили долго, оно быть может и не взлетело бы, как какой-нибудь CNTK от MS. Давно не следил, но вроде его вообще забросили, а доля рынка у него стремится к нулю. Сейчас на коне PyTorch (переродившийся Torch) за счёт гибкости и динамических графов вычислений.
Посмотрим, что будет дальше, всё же это молодая (в плане вычислительной возможности) область, прорыв в которой случился только благодаря современному железу, которая очень быстро развивается и в любой момент может повернуть совсем в другую сторону. То, что появились такие вещи как TF, Keras, PyTorch уже очень круто, а люди, которые над этим работают, заслуживают большого уважения.
Обзор Keras для TensorFlow