Керас градиент по вводу для нескольких выходных измерений - PullRequest
0 голосов
/ 14 января 2019

У меня есть модель keras с двумерным выводом (двоичная классификация).

model.output # <tf.Tensor 'dense_1_3/MatMul:0' shape=(?, 2) dtype=float32>

и

model.input # <tf.Tensor 'bidirectional_1_input:0' shape=(?, ?, 200) dtype=float32>

Я оценил три разных градиента для некоторого примера ввода формы (1,50,200)

gradients0 = K.gradients(model.output[:,0] model.inputs)
gradients1 = K.gradients(model.output[:,1], model.inputs)
gradients2 = K.gradients(model.output, model.inputs)

Я думал, что первые два выражения дают градиент для одиночных выходных нейронов, а последнее - тензор, содержащий первые два выражения. К моему удивлению, все три градиента имеют форму (1,50,200). На мой взгляд, градиент2 должен иметь форму (2,50,200), поскольку model.output является двухмерным. Что вычисляет керас в этом случае?

1 Ответ

0 голосов
/ 15 января 2019

Keras.backend.gradients () ожидает, что на выходе будет скалярная функция, а не многомерная. На небольшом примере я обнаружил, что K.gradients () идентично выполняет tf.gradients (). Таким образом (как показано здесь: https://www.tensorflow.org/api_docs/python/tf/gradients), ваш градиенты2 возвращает список тензоров длины len (xs), где каждый тензор является суммой (dy / dx) для y в ys , что объясняет, почему первый размер фигуры равен 1, а не 2.

Эта ссылка может вам помочь: Градиент тензорного потока по отношению к матрице

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