title: Can't reproduce results using Keras fit_generator
body: <p>I've just noticed that I get different results everytime I run a Keras model. I've tried the solutions from <a href="https://github.com/keras-team/keras/issues/2743" rel="nofollow noreferrer">this issue </a> on GitHub, basically:</p>
  
  <ul>
  <li>Setting up the seeds before importing anything else</li>
  <li>Setting <code>shuffle=False</code> on <code>fit_generator()</code></li>
  </ul>
  
  <p>Even though I did this, I still can't seem to reproduce the same results.</p>
  
  <p>I've posted this same question on the issue I've just linked, but I've decided to post here as well because of the visibility, hoping anyone can help me figure out what's wrong.</p>
  
  <pre><code>import numpy as np
  import tensorflow as tf
  import random as rn
  import os
  os.environ['PYTHONHASHSEED'] = '0'
  np.random.seed(42)
  rn.seed(12345)
  session_conf = tf.ConfigProto(intra_op_parallelism_threads=1, inter_op_parallelism_threads=1)
  from keras import backend as K
  tf.set_random_seed(1234)
  sess = tf.Session(graph=tf.get_default_graph(), config=session_conf)
  K.set_session(sess)
  
  from keras.layers import Input, Dropout, Flatten, Conv2D, MaxPooling2D, Dense, Activation, Lambda,GlobalAveragePooling2D
  from keras.optimizers import RMSprop , SGD, Adam,Nadam
  from keras.callbacks import ModelCheckpoint, Callback, EarlyStopping, History
  from keras.preprocessing.image import ImageDataGenerator
  from keras.applications import VGG16, VGG19, ResNet50, Xception
  from keras.models import Model
  
  batch_size = 32
  num_channels = 3
  img_size = 512
  img_full_size = (img_size, img_size, num_channels)
  num_classes = 2
  seed = 1 # for image transformations
  train_path = 'keras_folders/train/'
  validation_path = 'keras_folders/val/'
  test_path = 'keras_folders/test/'
  
  train_datagen = ImageDataGenerator(
      rescale=1./255,
      horizontal_flip=True)
  
  validation_datagen = ImageDataGenerator(
      rescale=1./255)
  
  test_datagen = ImageDataGenerator(
      rescale=1./255)
  
  train_generator = train_datagen.flow_from_directory(
      train_path,
      target_size=(img_size, img_size),
      batch_size=batch_size,
      class_mode='categorical', 
      seed=seed)
  
  validation_generator = validation_datagen.flow_from_directory(
      validation_path,
      target_size=(img_size, img_size),
      batch_size=batch_size,
      shuffle=False,
      class_mode='categorical',
      seed=seed)
  
  from collections import Counter
  counter = Counter(train_generator.classes)
  max_val = float(max(counter.values()))
  class_weights = {class_id : max_val/num_images for class_id, num_images in counter.items()}  
  
  conv_base = VGG16(weights='imagenet', include_top=False, input_shape=img_full_size)
  conv_base.trainable=True
  for layer in conv_base.layers[:4]:
      layer.trainable = False
  x = Flatten()(conv_base.output)
  x = Dense(256, activation='relu')(x)
  x = Dropout(0.218)(x)
  predictions = Dense(num_classes, activation='softmax')(x)
  model = Model(inputs = conv_base.input , outputs=predictions)
  
  adam = Adam(lr=0.0001)
  model.compile(loss='categorical_crossentropy', optimizer=adam, metrics=['accuracy'])
  
  train_samples = train_generator.samples
  validation_samples = validation_generator.samples
  model.fit_generator(
      train_generator,
      class_weight=class_weights,
      steps_per_epoch= train_samples // batch_size,
      epochs=1,
      validation_data= validation_generator,
      validation_steps= validation_samples // batch_size,
      shuffle=False)
  </code></pre>