Поддерживает ли tenorflow c ++ API автоматическое дифференцирование для обратного распространения? - PullRequest
0 голосов
/ 28 июня 2018

Поддерживает ли API C ++ тензорного потока автоматическое дифференцирование для обратного распространения градиента?
Если я напишу граф на c ++ и захочу запустить его в коде c ++ (не в python!), Будет ли работать автоматическое дифференцирование?

Предположим, что каждая операция в графе имеет реализацию градиента.

Я думаю, что документация относительно того, что может и не может сделать API C ++ с тензорным потоком, очень скудна.

Большое спасибо за помощь

1 Ответ

0 голосов
/ 28 июня 2018

Технически может, но AFAIK автоматическое дифференцирование только "настроено" в Python. Под этим я подразумеваю, что на более низком уровне каждая операция TensorFlow не объявляет себя своим градиентом (то есть соответствующей операцией, которая вычисляет ее градиент). Это вместо этого объявлено на уровне Python. Например, вы можете взглянуть на math_ops.py. Вы увидите, что, помимо прочего, есть несколько функций, украшенных @ops.RegisterGradient(...). Этот декоратор добавляет эту функцию в глобальный реестр (в Python) операций и их градиентов. Так, например, классы оптимизатора в значительной степени реализованы в Python, поскольку они используют этот реестр для построения вычисления обратного распространения (в отличие от использования для этой цели собственных примитивов TensorFlow, которых не существует).

Итак, дело в том, что вы можете делать те же вычисления, используя те же операции (которые затем реализуются с теми же ядрами), но я не думаю, что C ++ имеет (или когда-либо будет) такой градиентный реестр (и оптимизатор) классы), так что вам нужно будет разработать или скопировать эту конструкцию обратного распространения самостоятельно. В общем, API C ++ не очень подходит для построения графа вычислений.

Теперь другой вопрос (и, возможно, именно об этом вы и спрашивали в первую очередь) заключается в том, можете ли вы запустить уже существующий граф, который выполняет обратное распространение в C ++. Под этим я подразумеваю создание графа вычислений в Python, создание оптимизатора (который, в свою очередь, создает необходимые операции в графе для вычисления градиента и обновления переменных) и экспорта графа, а затем загрузки этого графа в C ++ и запуска его. Это вполне возможно и ничем не отличается от запуска чего-либо другого в TensorFlow C ++.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...