web-dev-qa-db-ja.com

TensorFlowでのtf.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 の質問に基づいています。

13
user3139545

_tf.gradients_のドキュメントを引用する

Ys w.r.tの和のシンボリック偏微分を構築します。 xs in xs。

したがって、これは動作するはずです:

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

ここで、tf.gradients()は、2番目の引数の各テンソルについて、同じ順序のリストとしてcostの勾配を返します。

詳細については、 tf.gradients を参照してください。

27
Priyatham