Afin d'avoir un résultat déterministe, j'ai essayé d'utiliser np.random.seed(0) mais j'ai remarqué que cela ne fonctionne pas comme je l'ai supposé. Un extrait simple pour le démontrer est le suivant :

import numpy as np 
np.random.seed(0)
error = np.random.rand(2,5)
print('error: \n' ,error)

L'extrait ci-dessus crée la sortie suivante :

error: 
 [[ 0.5488135   0.71518937  0.60276338  0.54488318  0.4236548 ]
 [ 0.64589411  0.43758721  0.891773    0.96366276  0.38344152]]

Je peux exécuter le code autant de fois que je le souhaite et la sortie est déterministe comme supposé. mais quand j'essaye de créer un deuxième tableau ce n'est plus le cas !

L'extrait ci-dessous, montre ceci:

import numpy as np 
np.random.seed(0)
error = np.random.rand(2,5)
error2 = np.random.rand(2,5)
print('error: \n' ,error)
print('error2: \n' ,error2) 

Les sorties :

error: 
 [[ 0.5488135   0.71518937  0.60276338  0.54488318  0.4236548 ]
 [ 0.64589411  0.43758721  0.891773    0.96366276  0.38344152]]
error: 
 [[ 0.79172504  0.52889492  0.56804456  0.92559664  0.07103606]
 [ 0.0871293   0.0202184   0.83261985  0.77815675  0.87001215]]

Qu'est-ce que j'oublie ici? Je pensais que définir une graine permettait un comportement déterministe, mais apparemment cela ne s'applique pas ici ! Qu'est-ce qui se passe ici?

0
Rika 17 mars 2019 à 20:59

2 réponses

Meilleure réponse

Vous devez réensemencer le RNG à chaque fois.

import numpy as np 
np.random.seed(0)
error = np.random.rand(2,5)
np.random.seed(0)
error2 = np.random.rand(2,5)
print('error: \n' ,error)
print('error2: \n' ,error2)

Sinon, vous continuez simplement la séquence aléatoire, sans recommencer.

2
Barmar 17 mars 2019 à 18:09

Si un (pseudo) générateur de nombres aléatoires est (ré)initialisé avec la même graine, il produira la même séquence de nombres.

np.random.seed(0)
print (np.random.rand(),np.random.rand())

0.5488135039273248 0.7151893663724195

np.random.seed(0)
print (np.random.rand(),np.random.rand())

0.5488135039273248 0.7151893663724195

Ce ne sera pas un (pseudo) générateur de nombres aléatoires s'il génère le même nombre aléatoire à chaque fois pour une graine. Ce sera une fonction déterministe f(seed). Lorsque vous le semez, la séquence de nombres est déterministe mais les nombres eux-mêmes sont aléatoires.

1
mujjiga 17 mars 2019 à 18:07