Как использовать функцию scipy на каждом элементе тензора, используя Keras? - PullRequest
0 голосов
/ 09 октября 2018

Я новичок в tenorflow, я хочу применить гамма-функцию scipy к существующему тензору.Когда я пытаюсь это

from scipy.special import gamma
gamma_t = K.map_fn(lambda x:gamma(1.0 + 1.0 / x) ,b)

Где b - существующий тензор, я получаю

TypeError: ufunc 'gamma' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''

Как я могу решить это?

1 Ответ

0 голосов
/ 09 октября 2018

Вы не можете использовать функции SciPy (или функции, основанные на NumPy, в общем) непосредственно на тензоре TensorFlow.Вы можете сделать это с tf.py_func, но в общем случае лучшим вариантом является использование только операций TensorFlow.В этом случае ни абстракция бэкэнда Keras, ни TensorFlow не имеют гамма-функции, но TensorFlow имеет tf.lgamma, что является его логарифмом (точнее, логарифмом его абсолютного значения).Затем вы можете получить то, что хотите:

gamma_t = K.map_fn(lambda x: K.exp(tf.lgamma(1.0 + 1.0 / x)), b)

PS: обратите внимание, что обычно рекомендуется использовать только бэкэнд-функции при манипулировании тензорами Keras, но так как это довольно специфическая особенностьи он там не раскрывается (хотя, несмотря на то, что в Theano есть реализация гамма-функции, в настоящее время нет CNTK, поэтому реализовать ее для всех бэкэндов было бы невозможно).

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