Какие семена должны быть установлены, чтобы реализовать 100% воспроизводимость результатов тренировок в тензорном потоке?

В общей настройке тензорного потока, как

model = construct_model()
with tf.Session() as sess:
    train_model(sess)

куда construct_model() содержит определение модели, включая случайную инициализацию весов (tf.truncated_normal) а также train_model(sess) выполняет обучение модели -

Какие семена мне нужно установить, где обеспечить 100% воспроизводимость между повторными запусками приведенного выше фрагмента кода? Тензор потока документации на

https://www.tensorflow.org/api_docs/python/constant_op/random_tensors

может быть кратким, но оставил меня немного смущенным. Я старался

tf.set_random_seed(1234)
model = construct_model()
    with tf.Session() as sess:
        train_model(sess)

Но каждый раз получал разные результаты.

4 ответа

Одна из возможных причин заключается в том, что при построении модели существует код, использующий модуль numpy.random. Так что, может быть, вы можете попытаться установить семя для NumPy тоже.

Лучшее решение, которое на сегодняшний день работает с GPU, - это установить детерминизм тензорного потока со следующим:

pip install tensorflow-determinism

Затем включите в свой код следующий код

import tensorflow as tf
import os
os.environ['TF_DETERMINISTIC_OPS'] = '1'

источник: https://github.com/NVIDIA/tensorflow-determinism

      SEED = 42
import os
import random

os.environ["TF_DETERMINISTIC_OPS"] = "1"
keras.utils.set_random_seed(SEED)
os.environ['PYTHONHASHSEED']=str(SEED)
random.seed(SEED)
np.random.seed(SEED)
tf.random.set_seed(SEED)

Что сработало для меня, так это после этого ответа с несколькими изменениями:

      import tensorflow as tf
import numpy as np
import random

# Setting seed value
# from https://stackoverflow.com/a/52897216
# generated randomly by running `random.randint(0, 100)` once
SEED = 75
# 1. Set the `PYTHONHASHSEED` environment variable at a fixed value
os.environ['PYTHONHASHSEED'] = str(SEED)
# 2. Set the `python` built-in pseudo-random generator at a fixed value
random.seed(SEED)
# 3. Set the `numpy` pseudo-random generator at a fixed value
np.random.seed(SEED)
# 4. Set the `tensorflow` pseudo-random generator at a fixed value
tf.random.set_seed(SEED)

Я не смог понять, как установить начальное число сеанса (шаг 5), но это не казалось необходимым.

Я запускаю Google Colab Pro на TPU с большим объемом оперативной памяти, и мои результаты обучения (график функции потерь) были точно такими же три раза подряд при использовании этого метода.

Другие вопросы по тегам