如何修复AttributeError: keras.backend无get_session属性及代码报错
解决AttributeError: module 'keras.backend' has no attribute 'get_session'的方案
这个错误我见得太多了——大概率是你在用TensorFlow 2.x版本的Keras(也就是tf.keras),但代码还停留在TF1.x的老写法上。keras.backend.get_session()这个方法在TF2里已经被移除了,因为TF2默认启用了即时执行模式(Eager Execution),不需要手动管理会话(Session)了。下面分两种情况给你具体的修复方案:
情况1:你使用的是TensorFlow内置的tf.keras
这是最常见的场景,直接根据你的需求选择下面的修复方式:
方式A:迁移到TF2的即时执行写法(推荐)
如果你的代码只是为了运行张量、获取结果,完全不需要手动创建会话。比如旧代码:
import keras.backend as K sess = K.get_session() output = sess.run(my_tensor)
直接改成:
# 把张量转换成numpy数组 output = my_tensor.numpy() # 如果是执行某个操作,直接调用即可,不需要会话 my_custom_op()
即时执行模式下,张量运算会立即执行,不需要通过session.run()触发,调试起来更直观。
方式B:兼容旧代码(不推荐,但应急可用)
如果你必须保留旧的会话逻辑,可以用TF2兼容TF1的API,手动关闭即时执行并创建会话:
import tensorflow as tf # 关闭即时执行模式 tf.compat.v1.disable_eager_execution() # 创建会话 sess = tf.compat.v1.Session() # 关联Keras后端的会话 tf.compat.v1.keras.backend.set_session(sess)
注意:这种写法属于过渡方案,TF1.x的API后续会逐步淘汰,建议还是慢慢迁移到TF2的写法。
情况2:你使用的是独立的Keras库(非tf.keras)
独立Keras在2.3.x版本之后也逐渐对齐TF2的模式,移除了get_session()。如果必须用这个方法,可以:
- 降级到Keras 2.2.x版本(最直接的应急方案):
pip install keras==2.2.5
- 或者同样改用TF兼容模式的写法,和上面情况1的方式B一致,导入
tf.compat.v1来管理会话。
常见场景的额外提示
如果是在自定义损失函数、层或者回调函数里用到了get_session(),比如需要计算某个张量的值:
- 旧代码:
sess.run(some_tensor) - 新写法:
some_tensor.numpy()或者tf.keras.backend.eval(some_tensor)(在图模式下可用)
记住,尽量拥抱TF2的即时执行模式,它能让你的代码更简洁,调试更方便,也能避免这类版本兼容问题。
内容的提问来源于stack exchange,提问作者Код про
相关产品推荐
相关产品推荐

