2017-09-15 2 views
0

나는 반복적 인 신경망을 기반으로 훈련 된 모델을 저장했다. 'lstm_vector_predict()'함수를 실행하면 동일한 모델을로드하더라도 매번 다른 값을 반환합니다. 값을 예측할 때 텐서 흐름이 난수 생성을 사용합니까?텐류 흐름 모델을 사용할 때마다 다른 결과가 나타나는 이유는 무엇입니까?

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

체크 포인트 파일이 변경되지 않고'get_list_of_values_to_input'이 변경되지 않는다고 가정 할 때,로드 할 모델 ('sample_model_vector.meta')에 임의의 작업이 포함될 수 있습니다. IE, tf.Variable()은 기본적으로 무작위 이니셜 라이저를 사용합니다. –

+0

변수로드 후 init 연산을 실행하지 마십시오. 이렇게하면 복원 된 값을 덮어 씁니다. –

답변

0

당신 때문에 LSTM 모델의 확률 적 성격의 다른 결과를 볼 것이다, 그것은 임의의 종자를 해결하기 어렵 기 때문에 LSTM 모델은 100 % 재현 가능한 결과를 얻을 수 있도록.

관련 문제