Ключевым отличием двух поколений популярной библиотеки глубокого обучения TensorFlow является переход от декларативного к императивному стилю программирования. Разбираемся в принципиальном отличии этих режимов.
В демонстрационных целях сравним два способа получения последовательности Фибоначчи (очередное число - сумма предыдущих, первые два 0 и 1) - в старой и новой версии TensorFlow. Основные отличия в коде будут обусловлены тем фактом, что во втором случае вычисления происходят немедленно, в то время как ранее они откладывались до начала сессии и принудительного вызова операций (подробнее читай здесь).
Соответственно, в старой версии библиотеки для получения очередного члена последовательности Фибоначчи требовалось сначала построить граф с набором переменных и операций. Затем создать новую сессию, в рамках которой инициализировать переменные и вычислить операции. У меня получился следующий скрипт:
Следует отметить, что такой разрыв между объявлением переменных и операций и их вычислением создает определенные трудности для отладки программы (подробнее читай здесь).
В новой версии те же цели достигаются по-другому. Код принимает привычный для Python вид:
Таким образом, во втором случае не требуется создавать граф вычислений, сессию, запускать отложенную инициализацию переменных. Операции выполняются немедленно, присвоение новых значений переменным происходит в привычном для Python стиле. Данная особенность делает удобным проведение отладки программы, соответственно, значительно облегчает работу с библиотекой в целом.