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

导入Keras Sequential遇unhashable type: 'list'错误,DQN模型运行失败

Python 3.9下Keras-RL导入Sequential时触发TypeError: unhashable type: 'list'

问题代码

from keras.models import Sequential
from keras.layers import Dense, Flatten
from keras.optimizers import Adam
from rl.agents import DQNAgent
from rl.policy import BoltzmannQPolicy
from rl.memory import SequentialMemory

class DeepQL:
    def __init__(self, env):
        self.env = env
        self.actions = env.action_space.n
        self.states  = env.observation_space.shape[0]

    def build_model(self, states, actions):
        model = Sequential()
        model.add(Flatten(input_shape=(1,states)))
        model.add(Dense(24, activation='relu'))
        model.add(Dense(24, activation='relu'))
        model.add(Dense(actions, activation='linear'))
        return model

    def build_agent(self):
        model = self.build_model(self.states, self.actions)
        policy = BoltzmannQPolicy()
        memory = SequentialMemory(limit=50000, window_length=1)
        dqn = DQNAgent(model=model, memory=memory, policy=policy, nb_actions=self.actions, nb_steps_warmup=10, target_model_update=1e-2)
        return dqn

    def compile(self):
        dqn = self.build_agent()
        dqn.compile(Adam(lr=1e-3), metrics=['mae'])
        dqn.fit(self.env, nb_steps=5000, visualize=False, verbose=1)

错误信息

Traceback (most recent call last):
  File "/Users/albi/PycharmProjects/replaybg_reinforce/py_replay_bg/reinforcementLearning/Agents/deepQL.py", line 1, in <module>
    from keras.models import Sequential
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/keras/__init__.py", line 8, in <module>
    from keras import _tf_keras
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/keras/_tf_keras/__init__.py", line 1, in <module>
    from keras._tf_keras import keras
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/keras/_tf_keras/keras/__init__.py", line 8, in <module>
    from keras import activations
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/keras/activations/__init__.py", line 8, in <module>
    from keras.src.activations import deserialize
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/keras/src/__init__.py", line 1, in <module>
    from keras.src import activations
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/keras/src/activations/__init__.py", line 3, in <module>
    from keras.src.activations.activations import elu
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/keras/src/activations/activations.py", line 1, in <module>
    from keras.src import backend
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/keras/src/backend/__init__.py", line 10, in <module>
    from keras.src.backend.common.keras_tensor import KerasTensor
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/keras/src/backend/common/keras_tensor.py", line 2, in <module>
    from keras.src.utils import tree
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/keras/src/utils/tree.py", line 12, in <module>
    from tensorflow.python.trackable.data_structures import ListWrapper
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/tensorflow/__init__.py", line 45, in <module>
    from tensorflow._api.v2 import __internal__
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/tensorflow/_api/v2/__internal__/__init__.py", line 8, in <module>
    from tensorflow._api.v2.__internal__ import autograph
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/tensorflow/_api/v2/__internal__/autograph/__init__.py", line 8, in <module>
    from tensorflow.python.autograph.core.ag_ctx import control_status_ctx # line: 34
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/tensorflow/python/autograph/core/ag_ctx.py", line 21, in <module>
    from tensorflow.python.autograph.utils import ag_logging
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/tensorflow/python/autograph/utils/__init__.py", line 17, in <module>
    from tensorflow.python.autograph.utils.context_managers import control_dependency_on_returns
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/tensorflow/python/autograph/utils/context_managers.py", line 19, in <module>
    from tensorflow.python.framework import ops
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/tensorflow/python/framework/ops.py", line 5906, in <module>
    ) -> Optional[Callable[[Any], message.Message]]:
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/typing.py", line 243, in inner
    return func(*args, **kwds)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/typing.py", line 316, in __getitem__
    return self._getitem(self, parameters)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/typing.py", line 433, in Optional
    return Union[arg, type(None)]
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/typing.py", line 243, in inner
    return func(*args, **kwds)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/typing.py", line 316, in __getitem__
    return self._getitem(self, parameters)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/typing.py", line 421, in Union
    parameters = _remove_dups_flatten(parameters)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/typing.py", line 215, in _remove_dups_flatten
    all_params = set(params)
TypeError: unhashable type: 'list'

问题原因

这个错误是Python 3.9的typing模块与最新版本TensorFlow/Keras的类型注解不兼容导致的。TensorFlow/Keras新版本使用了Python 3.10+支持的灵活类型语法,但Python 3.9的typing模块处理这类语法时会抛出哈希类型错误。

解决方案

方案1:升级Python版本到3.10+

直接将Python升级到3.10或更高版本,可彻底解决typing模块的兼容性问题,这是最优解。

方案2:降级TensorFlow/Keras到Python3.9兼容版本

若不想升级Python,可安装适配Python3.9的旧版依赖:

pip install tensorflow==2.15.0 keras==2.15.0

注意必须保证TensorFlow与Keras版本严格匹配,避免版本冲突。

方案3:替换Keras导入路径为TensorFlow内置版本

将代码中的Keras导入语句替换为TensorFlow内置的Keras:

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Flatten
from tensorflow.keras.optimizers import Adam

部分场景下,tensorflow.keras的兼容性更好,若Keras-RL依赖旧版Keras API,建议配合方案2的版本降级使用。

注意事项

  • 操作前建议创建虚拟环境,避免污染全局依赖
  • 版本调整后,重新安装Keras-RL确保依赖匹配:pip install keras-rl2(原keras-rl已停止维护,推荐使用keras-rl2)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 05:41:35