N セットの独立した乱数を生成しようとしています。10個の乱数の3セットの問題を示す簡単なコードがあります。tf.set_random_seed
を使用してシードを設定しても、異なる実行の結果は似ていないことに気付きました。ヘルプやコメントは大歓迎です。
(py3p6) bash-3.2$ cat test.py
import tensorflow as tf
for i in range(3):
tf.set_random_seed(1234)
generate = tf.random_uniform((10,), 0, 10)
with tf.Session() as sess:
b = sess.run(generate)
print(b)
これはコードの出力です:
# output :
[9.604688 5.811516 6.4159 9.621765 0.5434954 4.1893444 5.8865128
7.9785547 8.296125 8.388672 ]
[8.559105 3.2390785 6.447526 8.316823 1.6297233 1.4103293 2.647568
2.954973 6.5975866 7.494894 ]
[2.0277488 6.6134906 0.7579422 4.6359386 6.97507 3.3192968 2.866236
2.2205782 6.7940736 7.2391043]
私は何かが欲しい
[9.604688 5.811516 6.4159 9.621765 0.5434954 4.1893444 5.8865128
7.9785547 8.296125 8.388672 ]
[9.604688 5.811516 6.4159 9.621765 0.5434954 4.1893444 5.8865128
7.9785547 8.296125 8.388672 ]
[9.604688 5.811516 6.4159 9.621765 0.5434954 4.1893444 5.8865128
7.9785547 8.296125 8.388672 ]
更新 1:実際、シード初期化子を for ループ内に配置した理由は、それらを別の方法で設定したいからです (たとえば、別の MCMC 実行の場合と考えてください)。これは仕事をする私のコードですが、効率的かどうかはわかりません。基本的に、0 から 2^32-1 の間でいくつかのランダム シードを生成し、実行ごとにシードを変更します。メモリ/RAMの効率を高めるためのヘルプやコメントは大歓迎です。
import numpy as np
import tensorflow as tf
global_seed = 42
N_chains = 5
np.random.seed(global_seed)
seeds = np.random.randint(0, 4294967295, size=N_chains)
for i in range(N_chains):
tf.set_random_seed(seeds[i])
.... some stuff ....
kernel_initializer = tf.random_normal_initializer(seed=seeds[i])
.... some stuff
with tf.Session() as sess:
.... some stuff .....
.
.
.