Я запускаю программу обучения с подкреплением в тренажерном зале (BipedalWalker-v2), реализованную в тензорном потоке. Я установил случайное начальное значение окружения, tenorflow и numpy вручную следующим образом
os.environ['PYTHONHASHSEED']=str(42)
random.seed(42)
np.random.seed(42)
tf.set_random_seed(42)
env = gym.make('BipedalWalker-v2')
env.seed(0)
config = tf.ConfigProto(intra_op_parallelism_threads=1, inter_op_parallelism_threads=1)
config.gpu_options.allow_growth = True
sess = tf.Session(config=config)
# run the graph with sess
Однако каждый раз, когда я запускаю свою программу, я получаю разные результаты (без изменения какого-либо кода). Почему результаты не соответствуют и что мне делать, если я хочу получить тот же результат?
Обновление:
Единственные места, которые я могу придумать, могут ввести случайность (кроме нейронных сетей):
- Я использую
tf.truncated_normal
для генерации случайного шума epsilon
, чтобы реализовать шумовой слой
- Я использую
np.random.uniform
для случайного выбора сэмплов из буфера воспроизведения
Я также замечаю, что результаты, которые я получаю, довольно постоянны в первых 10 эпизодах, но затем начинают различаться. Другие вещи, такие как потери, также показывают аналогичную тенденцию, но не совпадают в числовом.
Обновление 2
Я также установил «PYTHONHASHSEED» и использую однопоточный процессор, как описано в @ jaypops96, но все еще не могу воспроизвести результат. Код был обновлен в вышеуказанном кодовом блоке