给定我具有如下线性模型,我想获得关于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/