Найти в Дзене
Властелин машин

TensorFlow: императивная 2 vs декларативная 1

Ключевым отличием двух поколений популярной библиотеки глубокого обучения TensorFlow является переход от декларативного к императивному стилю программирования. Разбираемся в принципиальном отличии этих режимов.

В демонстрационных целях сравним два способа получения последовательности Фибоначчи (очередное число - сумма предыдущих, первые два 0 и 1) - в старой и новой версии TensorFlow. Основные отличия в коде будут обусловлены тем фактом, что во втором случае вычисления происходят немедленно, в то время как ранее они откладывались до начала сессии и принудительного вызова операций (подробнее читай здесь).

Соответственно, в старой версии библиотеки для получения очередного члена последовательности Фибоначчи требовалось сначала построить граф с набором переменных и операций. Затем создать новую сессию, в рамках которой инициализировать переменные и вычислить операции. У меня получился следующий скрипт:

Следует отметить, что такой разрыв между объявлением переменных и операций и их вычислением создает определенные трудности для отладки программы (подробнее читай здесь).

В новой версии те же цели достигаются по-другому. Код принимает привычный для Python вид:

-2

Таким образом, во втором случае не требуется создавать граф вычислений, сессию, запускать отложенную инициализацию переменных. Операции выполняются немедленно, присвоение новых значений переменным происходит в привычном для Python стиле. Данная особенность делает удобным проведение отладки программы, соответственно, значительно облегчает работу с библиотекой в целом.