2017-09-15 3 views
0

Ich habe ein trainiertes Modell basierend auf wiederkehrenden neuronalen Netzen gespeichert. Wenn ich die folgende Funktion 'lstm_vector_predict()' ausfühle, gibt es jedes Mal einen anderen Wert zurück, obwohl es das gleiche Modell lädt. Verwendet der Tensorfluss eine Zufallszahlengenerierung bei der Vorhersage von Werten?Warum erhalte ich jedes Mal, wenn ich mein Tensorflow-Modell verwende, ein anderes Ergebnis?

import get_list_of_values_to_input 
import tensorflow as tf 
import tensorflow.contrib.learn as tflearn 
import tensorflow.contrib.layers as tflayers 
from tensorflow.contrib.learn.python.learn import learn_runner 
import tensorflow.contrib.metrics as metrics 
import tensorflow.contrib.rnn as rnn 
import numpy as np 


from backend.common.numpy_array_to_numpy_array_of_arrays import get_numpy_arrays_from_numpy_matrix 

def lstm_vector_predict(model_name='sample_model_vector.meta', number_of_tickers=2, batch_size=20,number_of_points=100, start_time=1489462200): 
    tf.reset_default_graph() 
    inputs = number_of_tickers 
    hidden = 100 
    output = number_of_tickers 
    current_time = start_time 

    X = tf.placeholder(tf.float32, [None, batch_size, inputs]) 
    # This is low level tensor flow stuff used for preparing output of data generation 
    basic_cell = tf.contrib.rnn.BasicRNNCell(num_units=hidden, activation=tf.nn.relu) 
    rnn_output, states = tf.nn.dynamic_rnn(basic_cell, X, dtype=tf.float32) 
    stacked_rnn_output = tf.reshape(rnn_output, [-1, hidden]) 
    stacked_outputs = tf.layers.dense(stacked_rnn_output, output) 
    outputs = tf.reshape(stacked_outputs, [-1, batch_size, output]) 
    # We get the saver ready 
    saver = tf.train.import_meta_graph(model_name) 
    init = tf.global_variables_initializer() 

    # Later, launch the model, use the saver to restore variables from disk, and 
    # do some work with the model. 
    return_values = [] 
    with tf.Session() as sess: 
     # Restore variables from disk. 
     saver.restore(sess, tf.train.latest_checkpoint('./')) 
     print("Model restored.") 
     # Check the values of the variables 
     sess.run(init) 
     for i in range(number_of_points): 
      last_values = get_list_of_values_to_input() 
      print("Generating point", i) 
      #x_generators = last_values[-batch_size:] 
      x_generators = last_values[-batch_size:].reshape(-1, batch_size, number_of_tickers) 
      y_forecast = sess.run(outputs, feed_dict={X: x_generators}) 
      return_values.append(y_forecast[-1][-1]) 
      current_time += 300 
    return return_values 
+0

Wenn sich Ihre Prüfpunktdateien nicht ändern und 'get_list_of_values_to_input' sich nicht ändert, besteht eine andere Möglichkeit darin, dass das geladene Modell (' sample_model_vector.meta') einige zufällige Ops enthält. IE, tf.Variable() verwendet standardmäßig einen zufälligen Initializer –

+0

Führen Sie die init op nicht nach dem Laden von Variablen. Dies überschreibt ihre wiederhergestellten Werte. –

Antwort

0

In Kürze erhalten Sie unterschiedliche Ergebnisse, weil der stochastischen Natur des LSTM Modells, und weil es schwierig ist, den Zufallskeim zu fixieren für LSTM Modelle 100% reproduzierbare Ergebnisse zu erhalten.

Verwandte Themen