web-dev-qa-db-fra.com

Fonctionnement des tf.gradients dans TensorFlow

Étant donné que j'ai un modèle linéaire comme suit, je voudrais obtenir le vecteur de gradient en ce qui concerne W et 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)

Cependant, si j'essaie quelque chose comme ça où le coût est une fonction de cost(x,y,w,b) et que je veux seulement des gradients par rapport à w and b:

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

Mes espaces réservés seront également inclus (X et Y). Même si j'obtiens un gradient avec [x,y,w,b], Comment puis-je savoir quel élément du gradient qui appartient à chaque paramètre, car il ne s'agit que d'une liste sans nom à quel paramètre la dérivée a été prise en ce qui concerne?

Dans cette question, j'utilise des parties de cette code et je m'appuie sur cette question.

13
user3139545

Citant les documents pour tf.gradients

Construit des dérivées partielles symboliques de la somme de ys w.r.t. x en xs.

Donc, cela devrait fonctionner:

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

Ici, tf.gradients() renvoie le gradient de cost par rapport à chaque tenseur du deuxième argument sous forme de liste dans le même ordre.

Lisez tf.gradients pour plus d'informations.

27
Priyatham