Дифференциация холесского фактора в TensorFlow

Я хотел бы получить градиент tf.cholesky относительно его ввода. На данный момент tf.cholesky не имеет зарегистрированного градиента:

LookupError: No gradient defined for operation 'Cholesky' (op type: Cholesky)

Код, использованный для генерации этой ошибки:

import tensorflow as tf
A = tf.diag(tf.ones([3]))
chol = tf.cholesky(A)
cholgrad = tf.gradients(chol, A)

В то время как я могу сам вычислить градиент и зарегистрировать его, единственное существующее средство, с помощью которого я видел вычисленный градиент Холецкого, включает в себя blob /master /theano /tenor /slinalg.py" rel =" nofollow "> использование циклов for и требует формы входной матрицы. Однако, насколько мне известно, символические циклы в настоящее время недоступны для TensorFlow.

Одним из возможных способов получения формы входной матрицы A, вероятно, будет использование:

[int(elem) for elem in list(A.get_shape())]

Но этот подход не работает, если размеры A зависят от объекта-заполнителя TensorFlow с формой TensorShape([Dimension(None)]).

Если у кого-нибудь есть идеи, как вычислить и зарегистрировать градиент tf.cholesky, я был бы очень признателен, если бы знал об этом.

4 голоса | спросил Rui Shu 27 52015vEurope/Moscow11bEurope/MoscowFri, 27 Nov 2015 21:22:16 +0300 2015, 21:22:16

1 ответ


0

Мы немного обсудили это в ответах и ​​комментариях на этот вопрос: Холенская декомпозиция TensorFlow . Возможно (?) Можно портировать Реализация CholeskyGrad в Theano, при условии, что его семантика - это то, что вам нужно. Теория основана на «Смитовой дифференциации алгоритма Холецкого» .

Если вы реализуете его как операцию C ++, в которую просто вызывает Python, у вас будет неограниченный доступ ко всем конструкциям циклов, которые вы можете пожелать, и ко всему, что предоставляет Eigen. Если вы хотите сделать это в чистом тензорном потоке, вы можете использовать операции потока управления, например tf.control_flow_ops.While для зацикливания.

Как только вы узнаете фактическую формулу, которую хотите применить, ответьте здесь: определение матрицы определителя в tensorflow показывает, как реализовать и зарегистрировать градиент для операции в тензорном потоке.

Вы также можете создать проблему на github , чтобы запросить эту функцию, хотя, конечно, , вы, вероятно, получите его быстрее, если внедрите его сами, а затем отправите запрос на извлечение. :)

ответил dga 27 52015vEurope/Moscow11bEurope/MoscowFri, 27 Nov 2015 21:51:55 +0300 2015, 21:51:55

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132