使用自定义keras模型,层共享dqn_agent.DqnAgent()

问题描述 投票:0回答:1

我正在尝试将自定义神经网络与 tf.在我的模型中我需要使用图层共享。因此,我使用函数式 API 来构建模型。该模型有一个字典作为输入,一层有 n 个神经元作为输出。最后一层是 Concat 层,而不是 Dens 层。我从函数式 API 获取的模型类型

keras.Model(inputs=[...], outpunts[...]
是“keras.engine.function.Functional”。

现在我想将我的模型与 tf Agent 一起使用,如下所示:

agent = dqn_agent.DqnAgent(
    train_env.time_step_spec(),
    train_env.action_spec(),
    q_network=model,
    optimizer=optimizer,
    td_errors_loss_fn=common.element_wise_squared_loss,
    train_step_counter=train_step_counter)

但是我收到以下错误:

AttributeError: 'Functional' object has no attribute 'create_variables'
  In call to configurable 'DqnAgent' (<class 'tf_agents.agents.dqn.dqn_agent.DqnAgent'>)

q_network 期望类型为“network.Network”的网络。我不确定如何以 DqnAgent() 接受它的方式转换或包装我的环境。我怎样才能做到这一点?非常感谢任何支持。如果您需要更多信息,请告诉我。

有关我的网络的其他信息:

  • 具有多个输入的输入字典。
  • 多个共享的 Dens 层。最后一个的输出是形状 (1,)。
  • 连接形状为 (1,) 的所有输出
  • 一个多层,通过将输出分别乘以 0 或 1 来消除不可行的操作。
python tensorflow neural-network reinforcement-learning dqn
1个回答
0
投票

试试这个:在

agent = dqn_agent.DqnAgent...
位之前,通过添加以下内容来重新定义
model

model = tf_agents.networks.sequential.Sequential(model.layers)

这个:

  • 使用
    model.layers
    ,
  • 从原始网络中拉出所有层
  • 然后使用这些相同的层构建一个
    tf_agents.networks.sequential.Sequential
    类型的新网络。

希望新模型适用于您的 DQN。

© www.soinside.com 2019 - 2024. All rights reserved.