Не могу воспроизвести результаты, когда я использую дополненные изображения с Keras - PullRequest
0 голосов
/ 21 апреля 2020

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

Примечание. Когда я удаляю "image = tf.image.random_flip_left_right (image, seed = seed)", я могу получить воспроизводимые результаты.

import numpy as np
import pandas as pd
import os
import random
import tensorflow as tf
from tensorflow.keras import layers
AUTOTUNE = tf.data.experimental.AUTOTUNE

os.environ['PYTHONHASHSEED'] = '1'
np.random.seed(1)
random.seed(1)
tf.random.set_seed(1)
tf.keras.backend.clear_session()
tf.compat.v1.set_random_seed(1)
session_conf = tf.compat.v1.ConfigProto(
    intra_op_parallelism_threads=1, 
    inter_op_parallelism_threads=1
)
sess = tf.compat.v1.Session(
    graph=tf.compat.v1.get_default_graph(), 
    config=session_conf
)
tf.compat.v1.keras.backend.set_session(sess)

dataset, info =  tfds.load('mnist', as_supervised=True, with_info=True)
train_dataset, test_dataset = dataset['train'], dataset['test']
num_train_examples= info.splits['train'].num_examples

def convert(image, label):
  image = tf.image.convert_image_dtype(image, tf.float32)
  return image, label

def augment(image,label,seed=5):
  image,label = convert(image, label)
  image = tf.image.convert_image_dtype(image, tf.float32)

  # image augmentation -----------------------------------
  image = tf.image.random_flip_left_right(image, seed=seed)
  # image augmentation -----------------------------------

  return image,label

BATCH_SIZE = 64
NUM_EXAMPLES = 2048
augmented_train_batches = (
    train_dataset
    .take(NUM_EXAMPLES)
    .cache()
    .map(augment, num_parallel_calls=AUTOTUNE)
    .batch(BATCH_SIZE)
    .prefetch(AUTOTUNE)
) 

def make_model():
  model = tf.keras.Sequential([
      layers.Flatten(input_shape=(28, 28, 1)),
      layers.Dense(4096, activation='relu'),
      layers.Dense(4096, activation='relu'),
      layers.Dense(10)
  ])
  model.compile(optimizer = 'adam',
                loss=tf.losses.SparseCategoricalCrossentropy(from_logits=True),
                metrics=['accuracy'])
  return model

model_with_aug = make_model()
aug_history = model_with_aug.fit(augmented_train_batches, epochs=2,shuffle = False)
...