Могу ли я получить градиент тензора относительно входа без применения ввода?

Например, мне нужно вычислить градиент cross_entropy в отношении x, но мне нужно применить другое значение к функции градиента.

То есть:

f'(x)|x = x_t

Я думаю tf.gradients() Функция даст только градиент при x = x, Так обеспечивает ли тензор поток какой-либо из этих функций?

1 ответ

Результат tf.gradients это тензор (список тензоров в общем), а не значение с плавающей точкой. В каком-то смысле этот тензор является функцией: он может быть оценен в любой точке. Клиенту нужно только указать желаемое входное значение.

Пример:

features = 3
n_samples = 10
hidden = 1

X = tf.placeholder(dtype=tf.float32, shape=[n_samples, features])
Y = tf.placeholder(dtype=tf.float32, shape=[n_samples])

W = tf.Variable(np.ones([features, hidden]), dtype=tf.float32, name="weight")
b = tf.Variable(np.ones([hidden]), dtype=tf.float32, name="bias")

pred = tf.add(tf.matmul(X, W), b)
cost = tf.reduce_mean(tf.pow(pred - Y, 2))

dc_dw, dc_db = tf.gradients(cost, [W, b])

session.run(tf.global_variables_initializer())

# Let's compute `dc_dw` at `ones` matrix.
print(dc_dw.eval(feed_dict={X: np.ones([n_samples, features]), 
                            Y: np.ones([n_samples])}))
Другие вопросы по тегам