Tensoflow: Providing jacobians and hessians to ScipyOptimizerInterface
This is not directly supported by TensorFlow's ScipyOptimizerInterface  but you should be able to build a hessian function that will be passed through the interface and work over its head. scipy.optimize.minimize expects a function that recieves a candidate solution p (in the form of a 1D numpy vector) and returns the Hessian.
Therefore, define a Python function that receives a numpy vector p and evaluates the hessian for the solution defined by p using sess.run(hess,feed_dict=feed_dict). 
hess is a tensor defined once by hess=tf.hessians(loss,variable) outside this function (so you won't define another tf.hessians operation with each function call).
feed_dict is a dictionary with your tensorflow variable as a key and a numpy array p reshaped to fit your variable's shape as a value. In case you optimize more than one variable in parallel, dig in external_optimizer.py to see how it packs and unpacks multiple tensors into a single vector (look for _pack and _make_eval_func).
Note that for most deep learning problems, calculating the Hessian is not practical because it's a matrix of the dimensions size(variable)xsize(variable) - which is typically too large. Hence the LBFGS optimizer is a more feasible second-order optimizer.
I am trying out the different optimization methods of tf.contrib.opt.ScipyOptimizerInterface and some of them (e.g. trust-exact) require the hessian of the objective function.
How can I use tf.hessians as hessian for tf.contrib.opt.ScipyOptimizerInterface? 
I tried to provide it with hess=tf.hessians(loss,variable) (which returns a list of tensors) but it needs a callable object. And if I input directly hess=tf.hessians I get TypeError: hessians() takes at least 2 arguments (1 given). 
If you have any examples of tf.gradients or tf.hessians used with ScipyOptimizerInterface it would already be super useful!