Python导入rl库失败报错ModuleNotFoundError的解决咨询
解决
rl库导入时ModuleNotFoundError: No module named 'keras.utils.generic_utils'的问题 问题原因
你使用的rl库(大概率是旧版keras-rl)基于独立版Keras开发,但当前项目采用TensorFlow集成的Keras(tensorflow.keras),两者模块路径不匹配,导致rl库无法找到旧版Keras的keras.utils.generic_utils模块。
解决方法
方法1:安装适配TensorFlow 2.x的rl库(推荐)
旧版keras-rl已停止维护,改用适配TensorFlow 2.x的keras-rl2:
- 卸载旧的rl库:
pip uninstall rl
- 安装keras-rl2:
pip install keras-rl2
- 导入语句无需修改,
keras-rl2兼容原有写法,同时建议简化TensorFlow导入路径(更规范):
# 替换原TensorFlow导入为标准写法 from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, Flatten from tensorflow.keras.optimizers import Adam from tensorflow.keras.utils import generic_utils # rl库导入保持不变 from rl.agents.dqn import DQNAgent from rl.policy import BoltzmannQPolicy from rl.memory import SequentialMemory
方法2:修改rl库源码(临时修复)
找到报错的callbacks.py文件(路径:/opt/homebrew/lib/python3.11/site-packages/rl/callbacks.py),将第12行的:
from keras.utils.generic_utils import Progbar
修改为和项目一致的TensorFlow Keras导入路径:
from tensorflow.python.keras.utils.generic_utils import Progbar
方法3:添加模块别名(无需修改源码)
在项目代码最顶部添加以下代码,为rl库创建兼容的模块别名:
import sys from tensorflow.python.keras.utils import generic_utils sys.modules['keras.utils.generic_utils'] = generic_utils # 后续库导入语句保持不变 from tensorflow.python.keras.engine import keras_tensor ... from rl.agents.dqn import DQNAgent
内容的提问来源于stack exchange,提问作者Alessia Volpi
相关产品推荐
相关产品推荐

