给定我具有如下线性模型,我想获得关于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是cost(x,y,w,b)的函数,而我只想相对于w and b进行渐变:

grads = tf.gradients(cost, tf.all_variable())


我的占位符也将包括在内(X和Y)。
即使我确实使用[x,y,w,b]获得了渐变,我如何知道渐变中的哪个元素属于每个参数,因为它只是一个没有名称的列表,该导数针对哪个参数?

在这个问题中,我使用了code的一部分,并基于this问题构建。

最佳答案

在文档中引用tf.gradients


  构造ys w.r.t的和的符号偏导数。 x在xs中。


因此,这应该工作:

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


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

阅读tf.gradients以获得更多信息。

关于machine-learning - tf.gradients如何在TensorFlow中工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41822308/

10-12 20:02