2017-07-23 3 views
1

Ich habe mein LSTM-Modell gebaut. Im Idealfall möchte ich die Variablen wiederverwenden, um später ein Test-LSTM-Modell zu definieren.Tensorflow Variable Wiederverwendung

with tf.variable_scope('lstm_model') as scope: 
    # Define LSTM Model 
    lstm_model = LSTM_Model(rnn_size, batch_size, learning_rate, 
        training_seq_len, vocab_size) 
    scope.reuse_variables() 
    test_lstm_model = LSTM_Model(rnn_size, batch_size, learning_rate, 
        training_seq_len, vocab_size, infer=True) 

Der obige Code gibt mir einen Fehler

Variable lstm_model/lstm_vars/W already exists, disallowed. Did you mean to set reuse=True in VarScope? 

Wenn ich die Wiederverwendung gesetzt = True wie im folgenden Codeblock gezeigt

with tf.variable_scope('lstm_model', reuse=True) as scope: 

ich eine andere Fehlermeldung erhalten

Variable lstm_model/lstm_model/lstm_vars/W/Adam/ does not exist, or was not created with tf.get_variable(). Did you mean to set reuse=None in VarScope? 

Als Referenz habe ich appae nden Sie den entsprechenden Modellcode unten. Der entsprechende Abschnitt im LSTM Modell, in dem ich die Gewichte haben

with tf.variable_scope('lstm_vars'): 
      # Softmax Output Weights 
      W = tf.get_variable('W', [self.rnn_size, self.vocab_size], tf.float32, tf.random_normal_initializer()) 

Der entsprechende Abschnitt, wo ich meine Adam Optimierer haben:

optimizer = tf.train.AdamOptimizer(self.learning_rate) 
+0

Haben Sie Ihre Variablen initialisieren behebt? –

+0

Ja. Ich habe: init = tf.initialize_all_variables() sess.run (init) – caramelslice

Antwort

1

Wenn Sie eine Variable zweimal (oder mehrmals), sollten Sie erstmalige Verwendung with tf.variable_scope('scope_name', reuse=False): und nächste Mal with tf.variable_scope('scope_name', reuse=True):.

Oder können Sie Methode tf.variable_scope.reuse_variables()

with tf.variable_scope("foo") as scope: 
    v = tf.get_variable("v", [1]) 
    scope.reuse_variables() 
    v1 = tf.get_variable("v", [1]) 

in Code über v und v1 sind die gleichen Variablen verwenden.

+0

Das war, was ich ursprünglich hatte. Also habe ich alles aus scope.reuse_variables() auskommentiert und das Problem in der Post wie oben erwähnt festgestellt. „mit tf.variable_scope ('lstm_model') als Rahmen: # define LSTM Modell lstm_model = LSTM_Model (rnn_size, batch_size, learning_rate, training_seq_len, vocab_size) scope.reuse_variables() test_lstm_model = LSTM_Model (rnn_size, batch_size , Lernrate, training_seq_len, vocab_size, infer = True) " – caramelslice

+1

Was tun Sie vor' mit tf.variable_scope ('lstm_model') als Scope: '? Es sieht so aus, als ob Sie im Code vor dieser Zeile die Variable 'lstm_model/lstm_vars/W' erhalten. –

+0

Nichts. Ich denke, das könnte der Grund sein. – caramelslice

3

Es scheint so, statt:

with tf.variable_scope('lstm_model') as scope: 
    # Define LSTM Model 
    lstm_model = LSTM_Model(rnn_size, batch_size, learning_rate, 
        training_seq_len, vocab_size) 
    scope.reuse_variables()  
    test_lstm_model = LSTM_Model(rnn_size, batch_size, learning_rate, 
        training_seq_len, vocab_size, infer_sample=True) 

dies das Problem

# Define LSTM Model 
lstm_model = LSTM_Model(rnn_size, batch_size, learning_rate, 
         training_seq_len, vocab_size) 

# Tell TensorFlow we are reusing the scope for the testing 
with tf.variable_scope(tf.get_variable_scope(), reuse=True): 
    test_lstm_model = LSTM_Model(rnn_size, batch_size, learning_rate, 
           training_seq_len, vocab_size, infer_sample=True) 
Verwandte Themen