5

I'm working in Keras with TensorFlow under the hood. I have a deep neural model (predictive autoencoder). I'm doing something somewhat similar to this: https://arxiv.org/abs/1612.00796 -- I'm trying to understand influence of variables in a given layer on the output.

For this I need to find 2nd derivative (Hessian) of the loss (L) with respect to output of particular layer (s): enter image description here

Diagonal entries would be sufficient. L is a scalar, s is 1 by n.

What I tried first:

dLds = tf.gradients(L, s)  # works fine to get first order derivatives
d2Lds2 = tf.gradients(dLds, s)  # throws an error
TypeError: Second-order gradient for while loops not supported.

I also tried:

d2Lds2 = tf.hessians(L, s)
ValueError: Computing hessians is currently only supported for one-dimensional tensors. Element number 0 of `xs` has 2 dimensions.

I cannot change shape of s cause it's a part of neural network (LSTM's state). The first dimension (batch_size) is already set to 1, I don't think I can get rid of it.

I cannot reshape s because it breaks flow of the gradients, e.g.:

tf.gradients(L, tf.reduce_sum(s, axis=0))

gives:

[None]

Any ideas on what can I do in this situation?

iramusa
  • 193
  • 1
  • 11

1 Answers1

0

This is not supported at the moment. See this report.

Albert
  • 65,406
  • 61
  • 242
  • 386