2017-12-30 4 views
0

Ich definierte einen Tensor in model() und verwenden Sie in der gleichen interaktiven Sitzung in einer anderen Methode, model_accuracy(). Angesichts eines Fehlers, der besagt, dass der Platzhalter in der Methode model_accuracy() nicht definiert ist. Kann mir jemand sagen, was fehlt mir hier?Tensorflow: Platzhalter nicht in einer interaktiven Sitzung definiert

sess = tf.InteractiveSession() 

def model_accuracy(X_train, Y_train, Z3, Y): 
    predict_op = tf.argmax(Z3, 1) 
    correct_prediction = tf.equal(predict_op, tf.argmax(Y, 1)) 
    accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float")) 
    train_accuracy = accuracy.eval({X: X_train, Y: Y_train}) 


def model(): 
    X = tf.placeholder(tf.float32, shape=...) 
    Y = tf.placeholder(tf.float32, shape=...) 
    W1 = tf.get_variable("W1", ...) 
    W2 = tf.get_variable("W2", ...) 
    Z1 = tf.nn.conv2d(X, W1, ...) 
    A1 = tf.nn.relu(Z1) 
    P1 = tf.nn.max_pool(A1, ...) 
    Z2 = tf.nn.conv2d(P1, W2, ...) 
    A2 = tf.nn.relu(Z2) 
    P2 = tf.nn.max_pool(A2, ...) 
    P2 = tf.contrib.layers.flatten(P2) 
    Z3 = tf.contrib.layers.fully_connected(P2, ...) 
    sess.run(tf.global_variables_initializer()) 
    ... # define optimizer and cost tensors using Z3 and Y 
    sess.run([optimizer, cost], feed_dict = {X: X_train, Y: Y_train}) # for n epochs 
    return Z3, Y 

Dann rufe ich model() und model_accuracy() wie so:

Z3, Y = model() # runs fine 
model_accuracy(X_train, Y_train, Z3, Y) # fails 

Hier ist der Fehler:

--------------------------------------------------------------------------- 
NameError         Traceback (most recent call last) 
<ipython-input-33-2da12d45d5f6> in <module>() 
----> 1 model_accuracy(X_train, Y_train, Z3, Y) 

<ipython-input-32-3b1eef80d775> in model_accuracy(X_train, Y_train, X_test, Y_test, Z3, Y, sess) 
     7  accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float")) 
----> 8  train_accuracy = accuracy.eval({X: X_train, Y: Y_train}, session = sess)  
NameError: name 'X' is not defined 

Antwort

0

Obwohl model_accuracy() die gleiche Sitzung wie model(), feed_dict Bedürfnisse mit allen haben Variablen, die in den Anwendungsbereich eingespeist werden. Hat funktioniert, wenn X zum Bereich hinzugefügt wird, indem die Funktion model_accuracy() übergeben wird.

Verwandte Themen