0
votes

Comprendre Tensorflow Initialize_All_Variables

Pourquoi le code suivant imprime 4 numéros différents?

# Random seed for reproducibility
tf.set_random_seed(1234)
# Random variable
foo = tf.Variable(tf.random_uniform(shape=(1,1)),name = 'foo')
# Operation to initialize variables
init = tf.initialize_all_variables()
# Run Operations in session
with tf.Session() as sess:
    # Loop 
    for i in range(1,5):
        # Initialize variables
        sess.run(init)
        # Print foo value
        print(sess.run(foo))


5 commentaires

Vous initialisez avec un nombre uniforme aléatoire. Si c'était la même valeur à chaque fois que cela ne serait pas aléatoire.


Ensuite, quel est le point de la graine aléatoire? Comment puis-je assurer la reproductibilité? @ xdurch0


Voir la réponse de Skillklergler. En tant que tel, votre programme est très reproductible. Si vous voulez les mêmes numéros aléatoires, chaque Session exécuter , vous pouvez essayer de régler la graine à nouveau chaque itération ou simplement créer un tableau aléatoire avec NUMPY une fois au tout début, et utilisez-le à plusieurs reprises pour initialiser vos variables. .


Note tf.initialize_all_variables est obsolète en faveur de TF .global_variables_initialiszer ou TF.Initialis. global_variables .


À propos de la question, les opérations aléatoires sont étatiques. Vous pouvez vous assurer qu'ils produiront les mêmes numéros dans deux sessions différentes en définissant le graphique et / ou la semence OP, mais vous ne pouvez pas "réinitialiser" leur état dans la même session, ainsi que l'état aléatoire "ne peut pas être enregistré ou restauré. Voir Nombre aléatoire dans Tensorflow 2.0 Pour les plans d'opérations aléatoires dans TF 2.x qui améliorent ces aspects.


3 Réponses :


0
votes

Je pense que lorsque vous exécutez sess.run (init) , il initie un nouveau nombre aléatoire pour la session.

La fonction initialisize_all_variables () est d'initialiser tous les nombres dans son ensemble, mais sess.run (init) est le code où cette session obtient son propre numéro.

Je ne suis pas sûr cependant. Je suis incapable de reproduire le code pour mieux comprendre.


0 commentaires

1
votes

La fonction tf.set_random_seed () assure la reproductibilité. Chaque fois que vous exécutez le programme, il génère la même séquence.

exemple xxx

Ceci permet de reproduire votre code. TENSORFLOW Documentation


0 commentaires

0
votes

OK, après avoir lu le Documentation et @skillsMuggler Réponse, J'ai réalisé que tf.set_random_seed (1234) fournit une reproductibilité entre les sessions . Je vais essayer de l'expliquer avec un exemple:

Si vous exécutez des variables Initializer sess1.run (init) plusieurs fois dans la même session, il créera un nombre aléatoire chaque fois que vous l'exécutez, Depuis chaque fois qu'il est initialisé, il crée un nombre aléatoire. xxx

La graine aléatoire garantit que si nous exécutons le code précédent sur une autre session, les chiffres générés seront le idem (reproductibilité). xxx

donc, il assure en effet la reproductibilité.


0 commentaires