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

TensorFlow Keras实现DDQN报Sequential无model属性错误

Double Deep Q-Learning 运行报错修复方案

错误现象

运行DDQN训练代码时抛出如下异常:

Traceback (most recent call last):
  File "/home/panda/PycharmProjects/ddqn/main.py", line 33, in <module>
    ddqn_agent.learn()
  File "/home/panda/PycharmProjects/ddqn/ddqn_keras.py", line 118, in learn
    self.update_network_parameters()
  File "/home/panda/PycharmProjects/ddqn/ddqn_keras.py", line 121, in update_network_parameters
    self.q_target.model.set_weights(self.q_eval.model.get_weights())
AttributeError: 'Sequential' object has no attribute 'model'

使用的DQN网络构建代码如下:

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

def build_dqn(lr, n_actions, input_dims, fc1_dims, fc2_dims):
    model = Sequential([
        Dense(fc1_dims, input_shape=(input_dims,)),
        Activation('relu'),
        Dense(fc2_dims),
        Activation('relu'),
        Dense(n_actions)])

    model.compile(optimizer=Adam(lr=lr), loss='mse')

    return model

已尝试将所有Keras导入路径修改为tensorflow.keras前缀,错误仍未解决。

错误根因

该问题与Keras导入路径无关,是旧教程代码与新版API逻辑不匹配导致:
build_dqn函数直接返回实例化完成的Sequential模型对象,对象本身不存在嵌套的.model属性。旧版参考教程大概率使用自定义类封装模型,将Sequential实例存储在类的model属性下,当前代码直接拿到Sequential实例后仍按旧逻辑访问.model属性,必然触发属性不存在的错误。

修复步骤

  • 定位到ddqn_keras.py中的update_network_parameters方法,删除权重同步逻辑中多余的.model调用,修改后代码如下:
    def update_network_parameters(self):
        # 错误写法:self.q_target.model.set_weights(self.q_eval.model.get_weights())
        self.q_target.set_weights(self.q_eval.get_weights())
    
  • 全局检索ddqn_keras.py文件中所有self.q_eval.model、self.q_target.model的调用位置,全部删除中间的.model字段。包括模型预测predict()、训练fit()、权重存取、模型保存/加载相关逻辑,q_eval和q_target本身就是可直接调用方法的Sequential模型实例,无需通过.model属性二次访问。
  • 高版本TensorFlow兼容处理:如果使用TensorFlow 2.16及以上版本,Adam优化器的学习率参数名已从lr变更为learning_rate,需要同步修改build_dqn中的编译代码,否则会触发参数不识别的警告或错误,修改后编译逻辑为:
    model.compile(optimizer=Adam(learning_rate=lr), loss='mse')
    
    TensorFlow 2.15及以下版本可保留原有lr=lr写法,无需调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 03:27:24