次のような線形モデルがある場合、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]
_でグラデーションを取得した場合でも、各パラメーターに属するグラデーションの要素は、どのパラメーターの派生物に関する名前のない単なるリストであるため、どのようにして知ることができますか?
_tf.gradients
_のドキュメントを引用する
Ys w.r.tの和のシンボリック偏微分を構築します。 xs in xs。
したがって、これは動作するはずです:
_dc_dw, dc_db = tf.gradients(cost, [W, b])
_
ここで、tf.gradients()
は、2番目の引数の各テンソルについて、同じ順序のリストとしてcost
の勾配を返します。
詳細については、 tf.gradients を参照してください。