Подтвердить что ты не робот

Как получить градиент потери в переменной TensorFlow?

Функция, за которой я работаю, - это указать, какой градиент данной переменной относится к моей функции ошибки, учитывая некоторые данные.

Один из способов сделать это - посмотреть, насколько изменилась переменная после вызова для тренировки, но, очевидно, это может варьироваться в широких пределах на основе алгоритма обучения (например, было бы почти невозможно сказать что-то вроде RProp) и просто не очень чисто.

Спасибо заранее.

4b9b3361

Ответ 1

Функция tf.gradients() позволяет вычислять символьный градиент одного тензора относительно одного или нескольких других тензоров - включая переменные. Рассмотрим следующий простой пример:

data = tf.placeholder(tf.float32)
var = tf.Variable(...)              # Must be a tf.float32 or tf.float64 variable.
loss = some_function_of(var, data)  # some_function_of() returns a 'Tensor'.

var_grad = tf.gradients(loss, [var])[0]

Затем вы можете использовать этот символический градиент для оценки градиента в некоторой конкретной точке (данных):

sess = tf.Session()

var_grad_val = sess.run(var_grad, feed_dict={data: ...})

Ответ 2

В TensorFlow 2.0 вы можете использовать GradientTape для достижения этой цели. GradientTape записывает градиенты любых вычислений, которые происходят в контексте этого. Ниже приведен пример того, как вы можете это сделать.

import tensorflow as tf

# Here goes the neural network weights as tf.Variable
x = tf.Variable(3.0)

with tf.GradientTape() as tape:
  # Doing the computation in the context of the gradient tape
  # For example computing loss
  y = x**2 

# Getting the gradient of weight w.r.t loss 
dy_dx = tape.gradient(y, x) 
print(dy_dx) # Returns 6