2017-07-21 6 views
2

Jedes Mal wenn ich LSTM-Netzwerk mit Keras im jupyter Notizbuch laufe, habe ich ein anderes Ergebnis, und ich habe viel gegoogelt, und ich habe einige verschiedene Lösungen ausprobiert, aber keine von sie arbeiten werden, hier sind einige Lösungen, die ich versucht:Wie reproduzierbares Ergebnis erhalten, wenn Keras mit Tensorflow Backend

  1. Satz

    random_seed=2017 from numpy.random import seed seed(random_seed)

  2. gesetzt tensorflow Zufallssaat Zufallskeim

    01 numpy

    from tensorflow import set_random_seed set_random_seed(random_seed)

  3. Satz build-in zufälligen Samen

    import random random.seed(random_seed)

  4. Satz PYTHONHASHSEED

    import os os.environ['PYTHONHASHSEED'] = '0'

  5. PYTHONHASHSEED in jupyter Notebook kernel.json hinzufügen

    { "language": "python", "display_name": "Python 3", "env": {"PYTHONHASHSEED": "0"}, "argv": [ "python", "-m", "ipykernel_launcher", "-f", "{connection_file}" ] }

und die Version meiner env ist:

Keras: 2.0.6 
Tensorflow: 1.2.1 
CPU or GPU: CPU 

und dies ist mein Code:

model = Sequential() 
model.add(LSTM(16, input_shape=(time_steps,nb_features), return_sequences=True)) 
model.add(LSTM(16, input_shape=(time_steps,nb_features), return_sequences=False)) 
model.add(Dense(8,activation='relu'))   
model.add(Dense(1,activation='linear')) 
model.compile(loss='mse',optimizer='adam') 
+0

Ergebnisse können aus verschiedenen Gründen variieren (z. B. zufällige Initiierung von Variablen). Wenn Sie also keinen Modellcode angeben, können wir nur so viel helfen – dv3

Antwort

3

Der Samen auf jeden Fall von Ihrem Modell Definition fehlt. Eine ausführliche Dokumentation finden Sie hier: https://keras.io/initializers/.

Im Wesentlichen verwenden Ihre Layer Zufallsvariablen als Basis für ihre Parameter. Daher erhalten Sie jedes Mal unterschiedliche Ausgaben.

Ein Beispiel:

model.add(Dense(1, activation='linear', 
       kernel_initializer=keras.initializers.RandomNormal(seed=1337), 
       bias_initializer=keras.initializers.Constant(value=0.1)) 

Keras mich einen Abschnitt hat über reproduzierbare Ergebnisse in ihrem FAQ-Bereich bekommen: (https://keras.io/getting-started/faq/#how-can-i-obtain-reproducible-results-using-keras-during-development). Sie haben das folgende Code-Snippet, um reproduzierbare Ergebnisse zu erzeugen:

import numpy as np 
import tensorflow as tf 
import random as rn 

# The below is necessary in Python 3.2.3 onwards to 
# have reproducible behavior for certain hash-based operations. 
# See these references for further details: 
# https://docs.python.org/3.4/using/cmdline.html#envvar-PYTHONHASHSEED 
# https://github.com/fchollet/keras/issues/2280#issuecomment-306959926 

import os 
os.environ['PYTHONHASHSEED'] = '0' 

# The below is necessary for starting Numpy generated random numbers 
# in a well-defined initial state. 

np.random.seed(42) 

# The below is necessary for starting core Python generated random numbers 
# in a well-defined state. 

rn.seed(12345) 

# Force TensorFlow to use single thread. 
# Multiple threads are a potential source of 
# non-reproducible results. 
# For further details, see: https://stackoverflow.com/questions/42022950/which-seeds-have-to-be-set-where-to-realize-100-reproducibility-of-training-res 

session_conf = tf.ConfigProto(intra_op_parallelism_threads=1, inter_op_parallelism_threads=1) 

from keras import backend as K 

# The below tf.set_random_seed() will make random number generation 
# in the TensorFlow backend have a well-defined initial state. 
# For further details, see: https://www.tensorflow.org/api_docs/python/tf/set_random_seed 

tf.set_random_seed(1234) 

sess = tf.Session(graph=tf.get_default_graph(), config=session_conf) 
K.set_session(sess) 
Verwandte Themen