tf.gradients如何在TensorFlow中工作

时间:2017-01-24 07:22:37

标签: machine-learning tensorflow linear-gradients

鉴于我有一个线性模型,我希望得到关于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 and b的渐变:

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

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

在这个问题中,我使用了code的部分内容,并以this问题为基础。

1 个答案:

答案 0 :(得分:25)

引用@Override public void addResourceHandlers(final ResourceHandlerRegistry registry) { registry.addResourceHandler("/resources/**").addResourceLocations("/resources/"); }

的文档
  

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

所以,这应该有效:

tf.gradients

此处,dc_dw, dc_db = tf.gradients(cost, [W, b]) 将第二个参数中每个张量的tf.gradients()个渐变返回为相同顺序的列表。

阅读tf.gradients了解详情。