从keras.backend导入binary_weighted_focal_crossentropy报ImportError求助
TensorFlow/Keras 导入binary_weighted_focal_crossentropy报错排查与解决
错误复现
运行导入相关代码时触发ImportError,完整错误栈如下:
--------------------------------------------------------------------------- ImportError Traceback (most recent call last) Input In [20], in <cell line: 1>() ----> 1 from tensorflow.keras import layers 2 import keras.backend as backend 3 import tensorflow as tf File ~\AppData\Local\Programs\Python\Python310\lib\site-packages\keras\api\_v2\keras\__init__.py:13, in <module> 10 import sys as _sys 12 from keras import __version__ ---> 13 from keras.api._v2.keras import __internal__ 14 from keras.api._v2.keras import activations 15 from keras.api._v2.keras import applications File ~\AppData\Local\Programs\Python\Python310\lib\site-packages\keras\api\__init__.py:8, in <module> 3 """Public API for tf. namespace. 4 """ 6 import sys as _sys ----> 8 from keras.api import keras 9 from tensorflow.python.util import module_wrapper as _module_wrapper 11 if not isinstance(_sys.modules[__name__], _module_wrapper.TFModuleWrapper): File ~\AppData\Local\Programs\Python\Python310\lib\site-packages\keras\api\keras\__init__.py:16, in <module> 14 from keras.api.keras import activations 15 from keras.api.keras import applications ---> 16 from keras.api.keras import backend 17 from keras.api.keras import callbacks 18 from keras.api.keras import constraints File ~\AppData\Local\Programs\Python\Python310\lib\site-packages\keras\api\keras\backend\__init__.py:24, in <module> 22 from keras.backend import binary_crossentropy 23 from keras.backend import binary_focal_crossentropy ---> 24 from keras.backend import binary_weighted_focal_crossentropy 25 from keras.backend import cast 26 from keras.backend import cast_to_floatx ImportError: cannot import name 'binary_weighted_focal_crossentropy' from 'keras.backend' (D:\Users\DGong\AppData\Local\Programs\Python\Python310\lib\site-packages\keras\backend.py)
该问题在多次pip/pip3卸载重装tensorflow、keras后仍未解决,检查源码可见binary_focal_crossentropy与binary_weighted_focal_crossentropy导出写法无明显差异,但仅后者触发导入异常。
核心原因
该问题是独立Keras包与TensorFlow内置Keras版本错配、安装残留文件导致API导出和实际实现不匹配:
- 环境中同时存在pip单独安装的独立
keras包,以及TensorFlow自带的tensorflow.keras模块 - 独立Keras包的API声明文件中列出了
binary_weighted_focal_crossentropy导出项,但当前安装的Keras核心实现文件backend.py中不存在该函数,属于版本碎片残留、版本号不匹配的典型问题 - 普通pip卸载重装不会自动清理历史版本残留的不匹配文件,因此反复重装无法解决问题
排查方向
- 执行版本校验命令,确认两个包的实际安装版本:
兼容要求为独立Keras的主版本号必须和TensorFlow版本完全对齐,例如TensorFlow 2.15需搭配Keras 2.15,禁止跨大版本混用pip show tensorflow keras - 打开错误栈提示路径下的
keras/backend.py文件,全局搜索binary_weighted_focal_crossentropy,确认该函数是否真实存在于实现文件中 - 检查Python环境的
site-packages目录,确认是否存在多个版本的Keras残留文件夹、版本号不匹配的.dist-info描述文件
解决方法
按优先级从高到低尝试:
- 彻底清理残留后重装版本匹配的包
重复执行卸载命令直到提示对应包不存在,确保卸载完全:
手动进入错误栈提示的site-packages路径(pip uninstall -y tensorflow keras tf-nightly keras-nightly pip3 uninstall -y tensorflow keras tf-nightly keras-nightlyD:\Users\DGong\AppData\Local\Programs\Python\Python310\lib\site-packages\),删除所有名称带keras、tensorflow的文件夹及对应的.dist-info文件,清理完成后重新安装指定版本的包,例如:pip install tensorflow==2.15 keras==2.15 - 卸载独立Keras包,统一使用TensorFlow内置Keras
若无特殊需求必须使用独立发行的Keras,直接卸载独立Keras包即可避免版本冲突:
所有导入语句统一从pip uninstall -y kerastensorflow.keras引入,不要单独导入独立Keras的模块:from tensorflow.keras import layers from tensorflow.keras import backend import tensorflow as tf - 临时应急补丁
若暂时无法重装,可直接打开报错路径下的keras/api/keras/backend/__init__.py文件,注释掉第24行的from keras.backend import binary_weighted_focal_crossentropy语句,只要业务代码不调用该加权二分类焦点损失函数,就不会影响其他功能正常运行。
内容的提问来源于stack exchange,提问作者Dana
相关产品推荐
相关产品推荐

