Какие семена должны быть установлены, чтобы реализовать 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'
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 с большим объемом оперативной памяти, и мои результаты обучения (график функции потерь) были точно такими же три раза подряд при использовании этого метода.