1. ホーム
  2. machine-learning

[解決済み】TensorFlowでtf.gradientsが動作する方法

2022-02-16 06:21:10

質問

以下のような線形モデルがあるとして、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

<ブロッククオート

xsにおけるysのxに対する和の記号的偏導関数を構築する.

というわけで、これでうまくいくはずです。

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

ここです。 tf.gradients() のグラデーションを返します。 cost は、第二引数の各テンソルに対して、同じ順序のリストとして与えられる。

読む tf.gradients をご覧ください。