2 votes

Changer les valeurs des variables dans Tensorflow et évaluer la fonction de coût

Je dois être capable de tracer par exemple les valeurs de la fonction de coût en fonction d'un paramètre quelconque (par exemple le biais b ci-dessous). Si par exemple mon graphique ressemble à quelque chose comme (pseudocode)

y = g(W x + b),
cost = sum(y ** 2),

W et b sont des tf.Variables, j'aimerais changer b de 0 à 1 et tracer les valeurs de cost.

Veuillez noter que je ne veux pas appeler eval ou sesssion.run après chaque changement de b en raison du surcoût! Par exemple, pour 100 points de graphique, cela prendrait une éternité.

  • Je connais l'existence de tf.assign, mais faire quelque chose comme [assigner, coût, assigner, coût, ...] et évaluer cela ne semble pas fonctionner
  • Je suppose que je pourrais mettre à jour la valeur de b à l'intérieur du graphique et appeler le coût après chaque mise à jour, mais je ne voudrais pas vraiment changer le graphique

Comment pourrais-je faire cela de manière efficace? Merci d'avance!

EDIT: en fait, ceci est probablement impossible à faire sans appeler eval/run entre les itérations... tant pis...

1voto

Dans tensor-flow, si vous utilisez des variables, vous ne pouvez les évaluer qu'après une initialisation. Donc, vous ne pouvez probablement pas les évaluer sans session. mais vous pouvez changer les paramètres de la manière suivante

import tensorflow as tf 
my_var = tf.Variable(10)
with tf.Session() as sess:
    sess.run(my_var.initializer)
    print(sess.run(my_var.assign_sub(2)))   #>> 8
    print(sess.run(my_var.assign_sub(2)))   #>> 6

1voto

mrry Points 1

Cela semble être un cas d'utilisation pour alimenter une valeur différente à chaque étape. En supposant que b est une variable scalaire, vous pourriez coder votre boucle avec quelque chose comme ce qui suit:

import numpy as np

sess = tf.Session()

# Faites varier `b_val` de 0 à 1 en 100 étapes.
for b_val in np.linspace(0, 1, 100):

  # Évaluez `cost` en utilisant `b = b_val`.
  cost_val = sess.run(cost, feed_dict={b: b_val})

  # Faites quelque chose avec `cost_val`....

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X