在tensorflow中唆缴,計(jì)算tensor y 關(guān)于tensor x的梯度是
dy_dx = tf.gradients(y, x)[0]
這里其實(shí)是計(jì)算的d(sum(y))/dx, 但等價(jià)于y的每一個(gè)分量關(guān)于x的導(dǎo)數(shù)激率。
假定有M個(gè)batch, 每個(gè)樣本是N維拜秧,即輸入x是一個(gè)M*N的矩陣,輸出y是M*1的向量,如果想要計(jì)算每一個(gè)y的每一個(gè)分量關(guān)于x的Hessian矩陣,結(jié)果應(yīng)該是M*N*N的 tensor。采用如下方式
# Hessian matrix batch_size * n_dim * n_dim
grads = tf.gradients(y, [x])[0]
hess = tf.stack([tf.gradients(tmp, [x])[0] for tmp in tf.unstack(grads, axis=1)], axis=2)