Lorsque je lisais "Explication détaillée du traitement des données de séries chronologiques Tensorflfow / Keras" publié vers mai de cette année, générez des nombres aléatoires. La partie est sortie.
Il a été dit que la graine était définie pour générer le même nombre aléatoire à chaque fois, mais je n'ai pas compris la description ici, alors je l'ai vérifiée brièvement.
Le nombre aléatoire généré par la fonction aléatoire est un nombre pseudo aléatoire. [Pseudo Random-Wikipedia](https://ja.wikipedia.org/wiki/Pseudo Random) En premier lieu, un nombre pseudo-aléatoire est une valeur numérique qui ressemble à un nombre aléatoire irrégulier, mais qui est calculée comme si elle était aléatoire par un certain calcul déterministe (algorithme fixe?).
Cela signifie que la valeur numérique définie comme état initial lors du calcul du nombre pseudo aléatoire est la graine.
En définissant cette graine sur la même valeur numérique, le même nombre pseudo aléatoire est généré à chaque fois, j'ai donc essayé de générer des nombres pseudo aléatoires plusieurs fois avec la graine fixe.
rand_generation.py
import bumpy as np
rng = np.random.RandomState(100)
for i in range(10):
print(rng.randn(5)) #randn :Échantillonné à partir de la distribution normale standard
Résultat de la génération: [-1.74976547 0.3426804 1.1530358 -0.25243604 0.98132079] [ 0.51421884 0.22117967 -1.07004333 -0.18949583 0.25500144] [-0.45802699 0.43516349 -0.58359505 0.81684707 0.67272081] [-0.10441114 -0.53128038 1.02973269 -0.43813562 -1.11831825] [ 1.61898166 1.54160517 -0.25187914 -0.84243574 0.18451869] [ 0.9370822 0.73100034 1.36155613 -0.32623806 0.05567601] [ 0.22239961 -1.443217 -0.75635231 0.81645401 0.75044476] [-0.45594693 1.18962227 -1.69061683 -1.35639905 -1.23243451] [-0.54443916 -0.66817174 0.00731456 -0.61293874 1.29974807] [-1.73309562 -0.9833101 0.35750775 -1.6135785 1.47071387]
Oh, je pensais que ce serait un nombre aléatoire différent à chaque fois qu'il était généré, mais il semble que la deuxième génération et les suivantes seront nouvellement générées en fonction du nombre aléatoire généré précédemment. https://teratail.com/questions/15388 (J'ai utilisé ceci comme référence.)
Dans le script ci-dessus, la valeur de départ est fixée à 100 et une liste de nombres pseudo aléatoires de longueur 5 est générée 10 fois (c'est-à-dire que le nombre aléatoire est généré 50 fois?), Donc c'est différent à chaque fois.
Lorsque j'ai exécuté à nouveau le même script, le même nombre aléatoire a été généré.
En utilisant la même graine, le même algorithme génère toujours le même premier nombre pseudo-aléatoire. ↓ Un deuxième nombre pseudo-aléatoire est généré sur la base du premier nombre pseudo-aléatoire, donc si le premier est toujours le même, le second est toujours le même ...
Cela signifie répéter. Le fait que le même nombre pseudo-aléatoire soit généré à chaque fois signifie que la même séquence de nombres pseudo-aléatoires est générée à partir du moment où la valeur de départ est définie. (Si vous y réfléchissez, ce n'est plus un nombre aléatoire si le même nombre aléatoire est toujours généré.)
Même en apprentissage automatique, si vous souhaitez évaluer les performances à l'aide de valeurs numériques aléatoires, si vous utilisez des nombres aléatoires différents à chaque fois, vous ne savez peut-être pas s'il s'agit de la différence de performances due à la différence de nombres aléatoires ou au résultat d'une amélioration des paramètres, etc. Il semble qu'il existe diverses utilisations.
À propos, si vous ne définissez pas de graine, il semble que vous puissiez garantir que la graine sera différente à chaque fois en utilisant l'heure système comme graine. Était-ce un tel gâchis? https://docs.scipy.org/doc/numpy/reference/generated/numpy.random.RandomState.html (J'ai utilisé ceci comme référence.)
Cela signifie-t-il que le n-1er nombre pseudo-aléatoire est la graine lors de la génération du nième nombre pseudo-aléatoire?
Recommended Posts