【问题标题】:keras-rl2 reinforcement learning agent reshaping datakeras-rl2 强化学习代理重塑数据
【发布时间】:2021-02-19 09:54:51
【问题描述】:

我正在尝试构建一个强化学习代理来学习自定义环境,该环境是根据 openai 的健身房规范构建的。

我有 np 个大小为 (20, 7) 的数组,我想将其传递给网络,并输出 7 个动作之一。

我在构建实际网络时遇到了麻烦,因为我想包含 LSTM 层。我的代码如下:

def build_model():

    model = Sequential()
    model.add(LSTM(60, return_sequences = True, input_shape=(20, 7), activation = 'relu'))
    model.add(Dense(21, activation = "relu"))
    model.add(Flatten())
    model.add(Dense(7, activation="linear"))
    model.compile(loss="mse", optimizer=Adam(lr=0.0002), metrics=['accuracy'])
    return model

但是,当我构建代理时,突然添加了一个网络未预料到的额外维度:

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

dqn = build_agent(model, actions)
dqn.compile(Adam(lr=1e-3), metrics=['mae'])
dqn.fit(env, nb_steps=50000, visualize=False, verbose=1)

ValueError: Error when checking input: expected lstm_input to have 3 dimensions, but got array with shape (1, 1, 20, 7)

我不完全确定代理为什么要重塑数据以添加一个额外的维度,(或两个?)但如果有人知道如何阻止这种情况发生以便我可以训练我的网络,我将非常感激。我的解决方案在我自己编写代码时运行,但我想使用 keras rl-2 库。

提前致谢!

【问题讨论】:

    标签: python tensorflow keras reinforcement-learning


    【解决方案1】:

    对于任何寻找答案的人,我通过添加层来解决这个问题:

    model.add(Reshape((20, 7), input_shape=(1, 20, 7)))
    

    作为第一层

    【讨论】:

      【解决方案2】:

      据我了解,您的代理能够计算您的环境,但无法计算其他 keras rl-2 环境,因为它们向特征向量(输入)添加了另一个维度。我相信这是因为您尝试运行的环境会返回一个包含通道的特征向量。通道仅仅意味着你需要多少个值来描述一个像素。例如,RGB 需要 3 个通道,而您的环境只返回一个通道的简化。

      由于您只对一个频道感兴趣,因此您可以挤出该频道,因为您不需要它:

      state = state.squeeze(axis=1)
      

      在将其传递到网络之前。或者,您可以通过将输入设置为 (1,20,7) 来定义模型以包含通道,如果您将来想要应用需要定义通道数的卷积层,这可能会很有用。

      【讨论】:

        【解决方案3】:

        在第一层试试这个

        window_length = 1
        model.add(Flatten(input_shape=(window_lenght ,) + env.observation_space.shape))
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-06-03
          • 1970-01-01
          • 2019-03-31
          • 2021-03-18
          • 2013-12-06
          • 1970-01-01
          • 2019-10-20
          • 1970-01-01
          相关资源
          最近更新 更多