TensorFlow报NameError: name 'session' is not defined错误求助
解决NameError: name 'session' is not defined问题
嘿,这个问题我太熟了——你犯了一个很常见的代码顺序错误!
问题出在哪?
Python是从上到下顺序执行代码的,你现在的写法是:先写了调用session.run()的代码,但真正创建session的with tf.Session() as session:块却放在了这段代码的后面。当解释器运行到session.run()时,它根本不知道session这个变量是什么,所以直接抛出了NameError。
怎么修复?
把所有需要用到session的代码,全搬到with tf.Session() as session:的代码块内部。这样当执行到这些代码时,session已经被正确创建并初始化了。
修正后的代码示例
# 先完成张量定义和数据准备(这部分不需要session) confusionMatrix = tf.confusion_matrix(labels=y_true_cls,predictions=y_pred_cls) x_batch, y_batch, _, cls_batch = data.valid.next_batch(batch_size_validation) # 这里才创建并启动session,所有依赖session的操作都放这里面 with tf.Session() as session: # 先初始化所有变量 init = tf.global_variables_initializer() session.run(init) # 现在session已经存在,可以正常执行运算了 confusionMatrix = session.run(confusionMatrix, feed_dict={x: x_batch, y_true: y_batch})
额外小提示
- 使用
with语句管理session是TensorFlow的最佳实践,它会自动帮你关闭session,避免资源泄漏。 - 所有需要通过session执行的操作(比如变量初始化、张量运算、模型训练/预测),都必须放在这个
with块内部。
内容的提问来源于stack exchange,提问作者Simplicity
相关产品推荐
相关产品推荐

