TensorFlow中tf.gradients是如何工作的

19

假设我有一个线性模型如下,我想得到关于W和b的梯度向量。

# tf Graph Input
X = tf.placeholder("float")
Y = tf.placeholder("float")

# Set model weights
W = tf.Variable(rng.randn(), name="weight")
b = tf.Variable(rng.randn(), name="bias")

# Construct a linear model
pred = tf.add(tf.mul(X, W), b)

# Mean squared error
cost = tf.reduce_sum(tf.pow(pred-Y, 2))/(2*n_samples)

然而,如果我尝试像这样使用成本是一个关于cost(x,y,w,b)的函数,而我仅希望获得关于w和b的梯度:
grads = tf.gradients(cost, tf.all_variable())

我的占位符也将包含(X和Y)。即使我使用[x,y,w,b]获得了一个渐变,我如何知道渐变中的每个元素属于哪个参数,因为它只是一个没有名称的列表,不知道导数是针对哪个参数进行的?
在这个问题中,我使用了code的部分,并且基于this的问题。
1个回答

36

使用tf.gradients的文档引用

构建关于xs中x的ys之和的符号偏导数。

所以,这样应该可以工作:

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

在这里,tf.gradients()返回第二个参数中每个张量相对于cost的梯度列表,顺序与参数列表相同。

阅读tf.gradients获取更多信息。


5
谢谢,一个小例子可以使一切变得不同! - user3139545

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接