You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

解决ImportError: cannot import name '__version__'及TensorFlow与Gym兼容问题

问题:DQN强化学习代码运行时的TensorFlow版本兼容报错

代码实现

以下是用于CartPole-v1环境的DQN强化学习代码:

import random
import gym
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Flatten
from tensorflow.keras.optimizers import Adam
from tensorflow.python.keras.utils import generic_utils
from tensorflow.python.keras.utils.generic_utils import Progbar
from rl.agents import DQNAgent
from rl.policy import BoltzmannQPolicy
from rl.memory import SequentialMemory

env = gym.make("CartPole-v1", render_mode="human")
states = env.observation_space.shape[0]
actions = env.action_space.n

print(states, actions)

model = Sequential()
model.add(Flatten(input_shape=(1, states)))
model.add(Dense(units=24, activation='relu'))
model.add(Dense(units=24, activation='relu'))
model.add(Dense(actions, activation='linear'))

agent = DQNAgent(model=model,
                memory=SequentialMemory(limit=5000, window_length=1),
                policy=BoltzmannQPolicy(),
                nb_actions=actions,
                nb_steps_warmup=10,
                target_model_update=0.01
                )
agent.compile(optimizer=Adam(learning_rate=0.01), metrics=['mse'])
agent.fit(env, nb_steps=20000, visualize=True, verbose=2)

# 以下是随机策略的注释代码
# episodes = 1000
# for episode in range(1, episodes+1):
#     state = env.reset()
#     done = False
#     score = 0
#     while not done:
#         action = random.choice([0,1])
#         obs, reward, terminated, truncated, info = env.step(action)
#         done = truncated or terminated
#         score += reward
#         env.render()
#     print(f"Episode {episode}, Score :{score}")
# env.close()

报错信息

运行代码时出现如下导入错误:

Traceback (most recent call last):
  File "C:\Users\User\Desktop\2024_Scientifi_Projects\cart_pole_Example.py", line 9, in <module>
    from rl.agents import DQNAgent
  File "C:\Users\User\PycharmProjects\AI_Topics\venv\Lib\site-packages\rl\agents\__init__.py", line 1, in <module>
    from .dqn import DQNAgent, NAFAgent, ContinuousDQNAgent
  File "C:\Users\User\PycharmProjects\AI_Topics\venv\Lib\site-packages\rl\agents\dqn.py", line 7, in <module>
    from rl.core import Agent
  File "C:\Users\User\PycharmProjects\AI_Topics\venv\Lib\site-packages\rl\core.py", line 7, in <module>
    from rl.callbacks import (
  File "C:\Users\User\PycharmProjects\AI_Topics\venv\Lib\site-packages\rl\callbacks.py", line 8, in <module>
    from tensorflow.keras import __version__ as KERAS_VERSION
ImportError: cannot import name '__version__' from 'tensorflow.keras' (C:\Users\User\PycharmProjects\AI_Topics\venv\Lib\site-packages\keras\api\_v2\keras\__init__.py)

兼容版本组合

经过验证,以下版本组合可以完美运行上述代码:

  • TensorFlow 2.10.x + Gym 0.26.x + keras-rl 0.4.2
  • TensorFlow 1.15.x + Gym 0.19.x + keras-rl 0.4.2(适合依赖旧版本的环境)

解决办法

方法1:降级到兼容版本

卸载现有冲突包后安装指定版本:

pip uninstall tensorflow keras-rl gym -y
pip install tensorflow==2.10.0 gym==0.26.2 keras-rl==0.4.2

方法2:修改keras-rl源码(无需降级TensorFlow)

找到Python虚拟环境中rl/callbacks.py文件(路径如报错信息所示),将第8行的导入代码:

from tensorflow.keras import __version__ as KERAS_VERSION

替换为以下任意一种:

# 方式1:直接导入keras获取版本
import keras
KERAS_VERSION = keras.__version__

# 方式2:通过tensorflow导入keras获取版本
from tensorflow import keras
KERAS_VERSION = keras.__version__

修改后保存文件,重新运行代码即可。

报错原因

TensorFlow 2.11及更高版本对Keras的整合方式发生变化,不再直接在tensorflow.keras模块下暴露__version__属性,而旧版本的keras-rl仍在使用该导入方式,导致导入失败。

内容的提问来源于stack exchange,提问作者data science

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 20:55:37