标签: keras-rl

TypeError: len 没有为符号张量很好地定义。(activation_3/Identity:0) 请调用 `x.shape` 而不是 `len(x)` 获取形状信息

我正在尝试在 openAI 健身房的一款游戏上实现 DQL 模型。但它给了我以下错误。

TypeError: len 没有为符号张量很好地定义。(activation_3/Identity:0) 请致电x.shape而不是len(x) 获取形状信息。

营造健身房环境:

ENV_NAME = 'CartPole-v0'

env = gym.make(ENV_NAME)
np.random.seed(123)
env.seed(123)
nb_actions = env.action_space.n
Run Code Online (Sandbox Code Playgroud)

我的模型看起来像这样:

model = Sequential()
model.add(Flatten(input_shape=(1,) + env.observation_space.shape))
model.add(Dense(16))
model.add(Activation('relu'))
model.add(Dense(nb_actions))
model.add(Activation('linear'))
print(model.summary())
Run Code Online (Sandbox Code Playgroud)

将该模型拟合到来自 keral-rl 的 DQN 模型,如下所示:

policy = EpsGreedyQPolicy()
memory = SequentialMemory(limit=50000, window_length=1)
dqn = DQNAgent(model=model, nb_actions=nb_actions, memory=memory, nb_steps_warmup=10, target_model_update=0.001, policy=policy)
dqn.compile(Adam(lr=1e-3), metrics=['mse', 'mae'])
dqn.fit(env, nb_steps=5000, visualize=False, verbose=3)
Run Code Online (Sandbox Code Playgroud)

错误来自这一行:

dqn = DQNAgent(model=model, nb_actions=nb_actions, memory=memory, nb_steps_warmup=10, target_model_update=0.001, policy=policy)
Run Code Online (Sandbox Code Playgroud)

我正在使用 keras-rl==0.4.2 和 tensorflow==2.1.0。根据其他答案,我也尝试了 tensorflow==2.0.0-beta0 但它没有解决错误。

有人可以向我解释为什么我面临这个错误吗?以及如何解决? …

python reinforcement-learning keras tensorflow keras-rl

15
推荐指数
1
解决办法
5645
查看次数

为什么我的DQN代理无法在非确定性环境中找到最优策略?

编辑:以下似乎也是如此FrozenLake-v0.请注意,我对简单的Q学习不感兴趣,因为我希望看到适用于连续观察空间的解决方案.

我最近创建了banana_gymOpenAI环境.方案如下:

你有一根香蕉.它必须在2天内出售,因为它在第3天会很糟糕.您可以选择价格x,但香蕉只会以概率出售

在此输入图像描述

奖励为x - 1.如果第三天没有出售香蕉,则奖励为-1.(直觉:你为香蕉付了1欧元).因此,环境是非确定性的(随机的).

操作:您可以将价格设置为{0.00,0.10,0.20,...,2.00}中的任何值

观察:剩余时间(来源)

我计算了最优政策:

Opt at step  1: price 1.50 has value -0.26 (chance: 0.28)
Opt at step  2: price 1.10 has value -0.55 (chance: 0.41)
Run Code Online (Sandbox Code Playgroud)

这也符合我的直觉:首先尝试以更高的价格出售香蕉,因为如果你不卖它,你知道你还有另一种尝试.然后将价格降低到0.00以上.

最优政策计算

我很确定这个是正确的,但为了完整起见

#!/usr/bin/env python

"""Calculate the optimal banana pricing policy."""

import math
import numpy as np


def main(total_time_steps, price_not_sold, chance_to_sell):
    """
    Compare the optimal policy to a given policy.

    Parameters
    ----------
    total_time_steps : int
        How often the agent may offer …
Run Code Online (Sandbox Code Playgroud)

python optimization reinforcement-learning openai-gym keras-rl

12
推荐指数
1
解决办法
1356
查看次数

如何在keras-rl/OpenAI GYM中实现自定义环境?

我是强化学习的完全新手,并一直在寻找一个框架/模块,以轻松导航这个危险的地形.在我的搜索中,我遇到了两个模块keras-rl和OpenAI GYM.

我可以让他们两个在他们的WIKI上共享的示例上工作,但是它们带有预定义的环境,并且几乎没有关于如何设置我自己的自定义环境的信息.

如果有人能指出我的教程,或者只是向我解释如何设置非游戏环境,我真的很感激?

reinforcement-learning keras openai-gym keras-rl

9
推荐指数
1
解决办法
5829
查看次数

Python强化学习-元组观察空间

我创建了一个自定义的 openai 健身房环境,其中包含离散的动作空间和稍微复杂的状态空间。状态空间被定义为元组,因为它结合了一些连续的维度和其他离散的维度:

import gym
from gym import spaces

class CustomEnv(gym.Env):
    def __init__(self):
        self.action_space = spaces.Discrete(3)
        self.observation_space = spaces.Tuple((spaces.Discrete(16),
                                               spaces.Discrete(2),
                                               spaces.Box(0,20000,shape=(1,)),
                                               spaces.Box(0,1000,shape=(1,)))
    ...
Run Code Online (Sandbox Code Playgroud)

我很幸运地使用 keras-rl(特别是 DQNAgent)训练​​了一个代理,但是 keras-rl 的支持不足且文档很少。对于可以处理此类观察空间的强化学习包有什么建议吗?目前看来 openai 基线和 stable-baselines 都无法处理它。

或者,是否有一种不同的方式可以定义我的状态空间,以便将我的环境适应这些定义更好的包之一?

python machine-learning reinforcement-learning openai-gym keras-rl

6
推荐指数
1
解决办法
3064
查看次数

在 keras-rl 中定义动作值

我在 keras-rl 中有一个自定义环境,在构造函数中有以下配置

def __init__(self, data):

    #Declare the episode as the first episode
    self.episode=1

    #Initialize data      
    self.data=data

    #Declare low and high as vectors with -inf values 
    self.low = numpy.array([-numpy.inf])
    self.high = numpy.array([+numpy.inf])

    self.observation_space = spaces.Box(self.low, self.high, dtype=numpy.float32)

    #Define the space of actions as 3 (I want them to be 0, 1 and 2)
    self.action_space = spaces.Discrete(3) 

    self.currentObservation = 0

    self.limit = len(data)      

    #Initiates the values to be returned by the environment
    self.reward = None
Run Code Online (Sandbox Code Playgroud)

如您所见,我的代理将执行 3 个动作,根据动作,将在下面的函数 step() 中计算不同的奖励:

def …
Run Code Online (Sandbox Code Playgroud)

python reinforcement-learning keras keras-rl

6
推荐指数
1
解决办法
448
查看次数

TensorFlow 的 Print 不打印

我试图从强化学习算法中理解一些代码。为了做到这一点,我试图打印张量的值。

我做了一段简单的代码来说明我的意思。

import tensorflow as tf
from keras import backend as K

x = K.abs(-2.0)
tf.Print(x,[x], 'x')
Run Code Online (Sandbox Code Playgroud)

目标是打印值“2”(-2 的绝对值)。但我只得到以下信息:

Using TensorFlow backend.

Process finished with exit code 0
Run Code Online (Sandbox Code Playgroud)

什么都没有,我怎么能像 print('...') 语句那样打印值 '2' 呢?

python keras keras-rl

5
推荐指数
1
解决办法
1万
查看次数

Gym (openAI) 环境动作空间取决于实际状态

我正在使用 Gym 工具包来创建我自己的 env 和 keras-rl 在代理中使用我的 env。问题是我的行动空间发生了变化,这取决于实际状态。例如,我有 46 种可能的操作,但在特定状态下只有 7 种可用,而且我无法找到对其进行建模的方法。

我读过这个问题open-ai-environment-with-change-action-space-after-each-step

但这并没有解决我的问题。

在 Gym 文档中没有执行此操作的说明,只有他们的 Github 存储库(仍然打开)上的一个问题。我无法理解代理(keras-rl、dqn 代理)如何选择一个动作,它是随机选择的吗?但从哪里来?

有人可以帮助我吗?想法?

reinforcement-learning openai-gym keras-rl

5
推荐指数
1
解决办法
852
查看次数

DQNAgent的批次大小不能超过1

当我尝试训练批号大于1的代理程序时,它给了我一个例外。我的问题在哪里?

lr = 1e-3
window_length = 1
emb_size = 10
look_back = 6

# "Expert" (regular dqn) model architecture

inp = Input(shape=(look_back,))
emb = Embedding(input_dim=env.action_space.n+1, output_dim = emb_size)(inp) 
rnn = Bidirectional(LSTM(5))(emb)
out = Dense(env.action_space.n, activation='softmax')(rnn)
expert_model = Model(inputs = inp, outputs = out)
expert_model.compile(loss='categorical_crossentropy', optimizer= Adam(lr))

print(expert_model.summary())
# memory
memory = PrioritizedMemory(limit=1000000,  window_length=window_length)

# policy
policy = BoltzmannQPolicy()

# agent
dqn = DQNAgent(model=expert_model, nb_actions=env.action_space.n, policy=policy, memory=memory, 
               enable_double_dqn=False, enable_dueling_network=False, gamma=.9, batch_size = 100, #Here
               target_model_update=1e-2, processor = RecoProcessor())
Run Code Online (Sandbox Code Playgroud)

我直接从keras-rl的代码中打印了一些值,它给出了以下输出:

State[array([0., 0., …
Run Code Online (Sandbox Code Playgroud)

python numpy keras keras-rl

5
推荐指数
0
解决办法
194
查看次数

Keras-rl2错误AttributeError:“顺序”对象没有属性“_compile_time_distribution_strategy”

当使用下面的代码时,我收到此错误 AttributeError: 'Sequential' object has no attribute '_compile_time_distribution_strategy' with keras-rl2。

我搜索了整个互联网但找不到解决方案。

import gym
import tensorflow
print("Import Done")

env = gym.make("CartPole-v0")
states = env.observation_space.shape[0]
print(env.observation_space.shape)
actions = env.action_space.n
print(actions)

print(states)

print(env.observation_space)
print(env.action_space)



def build_model(nstates, nactions):
    model = tensorflow.keras.models.Sequential()
    model.add(tensorflow.keras.layers.Flatten(input_shape=(1, states)))
    model.add(tensorflow.keras.layers.Dense(24, activation='relu'))
    model.add(tensorflow.keras.layers.Dense(24, activation='relu'))
    model.add(tensorflow.keras.layers.Dense(actions, activation='linear'))
    return model


model = build_model(states, actions)
# print(model.summary())

from rl.agents import DQNAgent
from rl.policy import BoltzmannQPolicy
from rl.memory import SequentialMemory


def build_agent(model, actions):
    policy = BoltzmannQPolicy()
    memory = SequentialMemory(limit=50000, window_length=1)
    dqn = DQNAgent(model=model, memory=memory, policy=policy, …
Run Code Online (Sandbox Code Playgroud)

tensorflow keras-rl

4
推荐指数
1
解决办法
4885
查看次数

keras-rl 的 EpisodeParameterMemory 是做什么的?

我找到了keras-rl/examples/cem_cartpole.py示例,我想了解,但没有找到文档。

线有什么作用

memory = EpisodeParameterMemory(limit=1000, window_length=1)
Run Code Online (Sandbox Code Playgroud)

做?什么是limit和 什么是window_length?增加其中一个/两个参数会产生什么影响?

reinforcement-learning keras-rl

1
推荐指数
1
解决办法
2231
查看次数

具有Tensorflow后端的Keras-在CPU上运行预测但在GPU上运行

我正在使用keras-rl通过D-DQN算法训练我的网络。我正在GPU上运行我的训练,该model.fit_generator()函数具有在反向执行时将数据发送到GPU 的功能。我怀疑与GPU处理数据的速度相比,数据的生成速度太慢。

在数据生成中,按照D-DQN算法的指示,我必须首先使用模型预测Q值,然后将这些值用于反向传播。如果使用GPU来运行这些预测,则意味着它们正在破坏我的数据流(我希望backprops尽可能频繁地运行)。

有什么方法可以指定在哪个设备上运行特定操作?以某种方式,我可以在CPU上运行预测,而在GPU上运行backprops。

python keras tensorflow keras-rl

1
推荐指数
2
解决办法
3331
查看次数