Это потому, что вы снова оцениваете новый sess.run.
Поскольку вы генерируете случайное число дляterministic_action, результатом оказывается следующее случайное число после 4, которое равно 1.
Вот результат вашего кода, когда я извлекаю значение defineistic_action также на последнем шаге.
Модификация:
print ("s_ph = ", stochastic_ph)
d_action = sess.run(deterministic_action)
print ("det_action= ", d_action)
r_action = sess.run(random_action)
print ("rand_action= ", r_action)
e = sess.run(eps)
c_action = sess.run(chose_random)
print ("chose_rand= ", c_action)
s_action, d_action = sess.run([stochastic_action, deterministic_action])
print ("s_action= ", s_action)
print ("det_action= ", d_action)
Результат:
s_ph = Tensor("stochastic:0", shape=(), dtype=bool, device=/device:CPU:0)
det_action= 4
rand_action= 11
chose_rand= False
s_action= 1
det_action= 1
Теперь все, что вам нужно сделать, это запустить все в одном sess.run
d_action, r_action, e, c_action, s_action = sess.run([deterministic_action, random_action, eps, chose_random, stochastic_action])
print ("det_action= ", d_action)
print ("rand_action= ", r_action)
print ("chose_rand= ", c_action)
print ("s_action= ", s_action)
Результат:
s_ph = Tensor("stochastic:0", shape=(), dtype=bool, device=/device:CPU:0)
det_action= 4
rand_action= 11
chose_rand= False
s_action= 4
Обновление:
Мне было непонятно, почему random_uniform генерирует разные значения при установке seed. Это потому, что код выполняется с тем же объектом сеанса, с которым он инициализировал переменные.
Модифицируя код новым объектом сеанса, вот что происходит:
print ("s_ph = ", stochastic_ph)
d_action = sess.run(deterministic_action)
print ("det_action= ", d_action)
sess.close()
sess = tf.Session()
sess.run(init, feed_dict={stochastic_ph: True})
s_action = sess.run(stochastic_action)
print ("s_action= ", s_action)
Результат:
s_ph = Tensor("stochastic:0", shape=(), dtype=bool, device=/device:CPU:0)
det_action= 4
s_action= 4