[PYTHON] Graine aléatoire corrigée dans TensorFlow et Numpy Un peu différent

Mémo très hors de propos. «Tf.set_random_seed ()» de TensorFlow semble se comporter légèrement différemment de «np.random.seed ()» de Numpy. Il semble que Numpy réinitialise la graine à chaque fois np.random.seed () et génère à nouveau la même séquence pseudo-aléatoire, contrairement à TensorFlow.

J'ai écrit une phrase qui n'est pas japonaise, mais lorsque j'exécute le code suivant, cela passe probablement.

import numpy as np
import tensorflow as tf

print '===== Numpy ====='
np.random.seed(0)
print np.random.uniform(size=5)
print np.random.uniform(size=5)

print 'Numpy can reset seed'
np.random.seed(0)
print np.random.uniform(size=5)
print np.random.uniform(size=5)

print '===== TensorFlow ====='
tf.set_random_seed(0)
with tf.Session() as sess:
    print sess.run(tf.random_uniform([5]))
    print sess.run(tf.random_uniform([5]))

print 'TensorFlow does not reset seed'
tf.set_random_seed(0)
with tf.Session() as sess:
    print sess.run(tf.random_uniform([5]))
    print sess.run(tf.random_uniform([5]))
===== Numpy =====
[ 0.5488135   0.71518937  0.60276338  0.54488318  0.4236548 ]
[ 0.64589411  0.43758721  0.891773    0.96366276  0.38344152]
Numpy can reset seed
[ 0.5488135   0.71518937  0.60276338  0.54488318  0.4236548 ]
[ 0.64589411  0.43758721  0.891773    0.96366276  0.38344152]

===== TensorFlow =====
I tensorflow/core/common_runtime/local_device.cc:25] Local device intra op parallelism threads: 4
I tensorflow/core/common_runtime/local_session.cc:45] Local session inter op parallelism threads: 4
[ 0.32064009  0.69209957  0.7421422   0.86931682  0.95991254]
[ 0.70880806  0.3939954   0.67383504  0.34078181  0.98877013]
TensorFlow does not reset seed
[ 0.30350876  0.06209636  0.98059976  0.51447523  0.15706789]
[ 0.48785222  0.40416086  0.97456396  0.57969069  0.09107506]

Si vous réexécutez complètement le code, la même séquence pseudo-aléatoire sera à nouveau générée, il n'y a donc pas de problème en termes de reproductibilité de l'expérience, mais par exemple, si vous continuez à faire % run hoge.py sur IPython, elle sera amorcée. J'ai fait attention car il n'a pas été réinitialisé, alors j'ai remarqué.

À propos, R est la même dénomination que Numpy.

> set.seed(0)
> runif(5)
[1] 0.8966972 0.2655087 0.3721239 0.5728534 0.9082078
> set.seed(0)
> runif(5)
[1] 0.8966972 0.2655087 0.3721239 0.5728534 0.9082078

Recommended Posts

Graine aléatoire corrigée dans TensorFlow et Numpy Un peu différent
Correction de la graine aléatoire avec TensorFlow
[TensorFlow 2.x (tf.keras)] Correction de la graine aléatoire pour améliorer la reproductibilité
J'ai fait un graphique de nombres aléatoires avec Numpy
Génération de vecteurs de nombres aléatoires de haute dimension ~ Échantillonnage d'hypercube latin / Échantillonnage super carré latin ~
[python] Mémorandum de génération aléatoire
Génération de nombres aléatoires entiers sans chevauchement (0-N-1)
Résumé de la génération de nombres aléatoires par Numpy
# Génération de chaînes aléatoires
Dérivation de la distribution t multivariée et implémentation de la génération de nombres aléatoires par python
[Note] Création aléatoire?
Génération de chaînes aléatoires (Python)
Module aléatoire de Numpy Génération aléatoire
Arbre de décision et forêt aléatoire
Notation A1 et nombre 26-aires
Graine aléatoire corrigée dans TensorFlow et Numpy Un peu différent
Clipping et normalisation dans TensorFlow
Module aléatoire de Numpy Génération aléatoire
Notation A1 et nombre 26-aires
Python a + = b et a = a + b sont différents
Différence entre le randint de Numpy et le randint de Random
Créer un fichier de nombres aléatoires de 1 Mo
Résumé de la génération de nombres aléatoires par Numpy
Recherche de semences aléatoires dans l'apprentissage automatique
Créer une chaîne aléatoire en Python
[Python] Précautions lors de la recherche des valeurs maximum et minimum avec un tableau numpy avec un petit nombre d'éléments