CAVEAT: Requires defined shape and can"t work with unknown shape.
size = np.prod(y.shape.as_list())
N = int(np.sqrt(size / self.num_matrices))reshaped = tf.reshape(y, shape=(self.num_matrices, N, N))
indices = np.array([np.hstack(x) for x in
itertools.product(np.arange(self.num_matrices), np.dstack(np.tril_indices(N))[0])])
triangular = tf.reshape(tf.gather_nd(reshaped, indices), shape=[-1])
return triangular
def log_jacobian_tensor(self, x):
return tf.zeros((1,), settings.float_type)