Запутанный декларативный стиль или код, похожий на "нотации", головная боль от отладок... А если ваша модель неожиданно выходит за рамки парадигмы работы фреймворка — приходится прикладывать титанические усилия по переработке кода или разворачиванию парочки здоровенных костылей. И да, мы про TensorFlow.
Все из-за самого статического графа вычислений во фреймворке... Граф вычисление — это абстрактное представление алгоритма вычислений в виде, не поверите, математического графа. Где ребра — потоки данных, а узлы — операции. Узлами могут быть слоями нейронки, а ребра — потоками данных. В статическом варианте можно оптимизировать и ускорить работу вашего TPU или GPU, провести объединение или распараллеливание операций.
Только доступа у вас к обработке данных нет. Поэтому любые ошибки = час сеанса, пока TF не обнаружит проблемы. А крупные модели ML иногда требуют и больше времени... Это серьезный минус всех фреймворков, построенных на работе статического графа вычислений.
А теперь представьте, что фреймворк перестраивает граф перед каждым запуском. Теперь никаких проблем с отладкой, а также практически бесконечная гибкость и расширяемость.
Вот тут и мы и говорим о PyTorch. Интуитивный и похожий на Питон синтаксис, неплохая интеграция с другими библиотеками и доступ к быстрой отладке – все это про него. И это мы не упоминаем кучу модульных элементов, которые легко комбинировать, упрощенное написание собственных типов слоев. Pytorch – про эксперименты, быстрое обучение и небольшие проекты.
Приятное дополнение — широкий выбор предварительно обученных моделей.
Но если вам все же нужна оптимизация ваших вычислений... тогда стоит обратиться к конкуренту от Google.