Linux下调用bagnet33报keras.utils无get_file属性问题
问题原因
运行bagnet_model = bagnets.kerasnet.bagnet33()初始化BagNet模型时抛出如下报错:
'keras.utils' has no attribute 'get_file'
该报错和你之前调整segmentation_models运行框架的操作没有关系——sm.set_framework()仅对segmentation_models库自身的导入逻辑生效,BagNet库不会读取该配置,所以修改后不会影响BagNet的运行。
报错核心是BagNet的Keras实现基于Keras 2.x编写,和你当前环境的Keras版本/导入路径不匹配,常见触发场景:
- TensorFlow 2.16及以上版本默认绑定Keras 3.x,Keras 3对部分API的路径做了调整,老代码直接调用
keras.utils.get_file会找不到属性 - BagNet默认导入独立安装的Keras包,如果你环境里仅安装了TensorFlow内置的
tf.keras,或者独立Keras版本和代码要求不匹配,也会触发该报错
修复步骤
按顺序操作即可:
- 先确认当前环境版本
执行以下代码打印版本信息:
如果TensorFlow版本≥2.16,或者独立Keras版本≥3.0.0,就属于版本不匹配场景。import tensorflow as tf print(f"TensorFlow版本: {tf.__version__}") try: import keras print(f"独立Keras版本: {keras.__version__}") except ImportError: print("未安装独立Keras包") - 优先使用无源码修改的兼容方案
Linux终端直接执行以下命令,安装和BagNet兼容的依赖版本:
安装完成后重启Python内核,重新执行模型初始化代码即可。pip uninstall -y keras tf-keras pip install tensorflow==2.15.0 keras==2.15.0 - 如果不想降级TensorFlow版本,可手动修改BagNet源码适配现有环境
找到Python环境下的bagnets安装路径(一般在site-packages/bagnets/目录下),打开kerasnet.py文件:- 将文件头部所有
import keras、from keras.xxx import xxx的导入语句,全部替换为from tensorflow import keras、from tensorflow.keras.xxx import xxx - 确认文件中
get_file的调用路径为keras.utils.get_file,没有拼写错误
修改完成后保存文件,重启内核即可正常运行。
- 将文件头部所有
注意事项
- 修复完成后执行
pip list | grep -E "tensorflow|keras",确认环境里没有多个版本的Keras/TensorFlow共存,避免导入冲突 - 不需要额外调整segmentation_models的框架配置,该配置不会影响BagNet的运行逻辑
内容的提问来源于stack exchange,提问作者captain2001
相关产品推荐
相关产品推荐

