我可以在不应用输入的情况下获得相对于输入的张量梯度吗?

时间:2018-04-10 13:52:31

标签: python tensorflow machine-learning tensor tensorflow-gradient

例如,我需要计算cross_entropy相对于x的渐变,但我需要将另一个值应用于渐变函数。

那是:

f'(x)|x = x_t

我认为tf.gradients()函数只会在x = x处给出渐变。 那么tensorflow是否提供了这个功能呢?

1 个答案:

答案 0 :(得分:1)

tf.gradients的结果是 tensor (一般的张量列表),而不是 float 值。在某种程度上,这个张量一个函数:它可以在任何点进行评估。客户端只需要提供所需的输入值。

示例:

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])}))