2017-12-30 14 views
0

model()에 텐서를 정의한 다음 다른 방법으로 동일한 대화식 세션에서 사용합니다 (model_accuracy()). 자리 표시자가 model_accuracy() 메소드에 정의되어 있지 않다는 오류가 표시됩니다. 누군가 내가 여기서 뭘 놓칠 지 말해 줄 수 있니?tensorflow : 대화 형 세션에서 자리 표시자가 정의되지 않았습니다.

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 

은 그럼과 같이 model()model_accuracy() 전화 : model_accuracy() 비록

--------------------------------------------------------------------------- 
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 

답변

0

을 모두 가지고 model()로, feed_dict 요구를 동일한 세션을 사용하고 있습니다 : 여기

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

오류입니다 변수가 범위로 ​​공급됩니다. 범위 Xmodel_accuracy() 함수로 전달되어 작업 할 때 작업했습니다.