Повторяемые результаты от тензорного потока - PullRequest
0 голосов
/ 24 декабря 2018

Я хочу получить повторяемые результаты при обучении модели тензорного потока.Я посмотрел, как это сделать.Код, который я использовал, выглядит следующим образом:

os.environ['PYTHONHASHSEED']='0'
np.random.seed(66)
rn.seed(66)
tf.set_random_seed(66)
tf.random.set_random_seed(66)
session_conf=tf.ConfigProto(intra_op_parallelism_threads=1, inter_op_parallelism_threads=1)
sess=tf.Session(graph=tf.get_default_graph(),config=session_conf)

Я обучил модель и получил следующие результаты:

Epoch 1/7
 - 20s - loss: 0.6240 - acc: 0.6862 - val_loss: 0.2289 - val_acc: 0.9333
Epoch 2/7
 - 10s - loss: 0.2085 - acc: 0.9312 - val_loss: 0.1753 - val_acc: 0.9667
Epoch 3/7
 - 10s - loss: 0.1124 - acc: 0.9675 - val_loss: 0.1626 - val_acc: 0.9167
Epoch 4/7
 - 10s - loss: 0.0712 - acc: 0.9863 - val_loss: 0.1223 - val_acc: 0.9667
Epoch 5/7
 - 10s - loss: 0.0439 - acc: 0.9950 - val_loss: 0.1187 - val_acc: 0.9667
Epoch 6/7
 - 10s - loss: 0.0338 - acc: 0.9975 - val_loss: 0.1067 - val_acc: 0.9667
Epoch 7/7
 - 10s - loss: 0.0264 - acc: 0.9975 - val_loss: 0.1074 - val_acc: 0.9667

Я перезапустил ядро ​​и очистил все выходные данные, а затем снова переобучился.Результаты:

Epoch 1/7
 - 20s - loss: 0.6240 - acc: 0.6862 - val_loss: 0.2289 - val_acc: 0.9333
Epoch 2/7
 - 10s - loss: 0.2086 - acc: 0.9312 - val_loss: 0.1751 - val_acc: 0.9667
Epoch 3/7
 - 10s - loss: 0.1125 - acc: 0.9688 - val_loss: 0.1629 - val_acc: 0.9333
Epoch 4/7
 - 10s - loss: 0.0710 - acc: 0.9875 - val_loss: 0.1244 - val_acc: 0.9667
Epoch 5/7
 - 10s - loss: 0.0440 - acc: 0.9925 - val_loss: 0.1264 - val_acc: 0.9667
Epoch 6/7
 - 10s - loss: 0.0343 - acc: 0.9975 - val_loss: 0.1083 - val_acc: 0.9667
Epoch 7/7
 - 10s - loss: 0.0258 - acc: 1.0000 - val_loss: 0.1147 - val_acc: 0.9667

Различия невелики, но кто-нибудь знает, почему они не совпадают?

1 Ответ

0 голосов
/ 24 января 2019

После некоторых исследований я обнаружил множество причин отсутствия повторяемости.Я использую генератор данных изображения в Керасе с потоком из каталога.Поток из каталога имеет аргумент seed =.Это должно быть установлено на начальный номер, который контролирует порядок и преобразования на изображениях.Далее я посмотрел на модель.Я использую модель MobileNet.Это определение модели включает в себя спецификацию "коэффициента отсева".Поскольку это случайный процесс, его нужно посеять.Однако в определении функции мобильной сети отсутствует параметр для получения входного параметра начального числа.

def MobileNet(input_shape=None,
          alpha=1.0,
          depth_multiplier=1,
          dropout=1e-3,
          include_top=True,
          weights='imagenet',
          input_tensor=None,
          pooling=None,
          classes=1000,
          **kwargs):
"""Instantiates the MobileNet architecture.

Чтобы исключить случайность, вы можете установить коэффициент отсева = 0, но это может привести к переобучениюмодель.

...