TD; DR: есть ли способ оценить f '(x1), f' (x2), ..., f '(xn) всего за один прогон графа в векторизованной форме? Где f '(x) - производная от f (x).
Что-то вроде:
x = tf.placeholder(tf.float32, shape=[100])
f = tf.square(x)
f_grad = tf.multiple_gradients(x) # f_grad contains f'(x[0]), f'(x[1]), ...
Точнее говоря, я пытаюсь реализовать Black Box Stochastic Variational Inference (BBSVI) вручную (я знаю, что мог бы использовать такую библиотеку, как Edward , но я пытаюсь реализовать ее самостоятельно).
В какой-то момент мне нужно вычислить среднее значение f '(x) g (x) для множества различных значений x (x1, x2, ..., xn), где f (x) и g (x) равны двум функции, и f '(x) является производной от f (x).
Используя функцию автодифференцирования TensorFlow, я могу вычислить f '(x1), f' (x2), ..., f '(xn), просто вызывая f_prime.eval(feed_dict={x: xi})
один раз для каждого значения xi в (x1, x2, ..., хп). Это совсем не эффективно: я хотел бы использовать вместо этого векторизованную форму, но я не уверен, как это сделать.
Возможно, используя tf.stop_gradient()
как-нибудь? Или используя аргумент grad_ys
в tf.gradients()
?