TypeError: len is not well defined for symbolic Tensors. (activation_3/Identity:0) Please call `x.shape` rather than `len(x)` for shape information
TypeError: len is not well defined for symbolic Tensors. (activation_3/Identity:0) Please call `x.shape` rather than `len(x)` for shape information
我正在尝试在 openAI gym 的一款游戏上实现 DQL 模型。但它给了我以下错误。
TypeError: len is not well defined for symbolic Tensors.
(activation_3/Identity:0) Please call x.shape
rather than len(x)
for shape information.
创建健身房环境:
ENV_NAME = 'CartPole-v0'
env = gym.make(ENV_NAME)
np.random.seed(123)
env.seed(123)
nb_actions = env.action_space.n
我的模型是这样的:
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())
将该模型拟合到来自 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)
错误来自这一行:
dqn = DQNAgent(model=model, nb_actions=nb_actions, memory=memory, nb_steps_warmup=10, target_model_update=0.001, policy=policy)
我正在使用 keras-rl==0.4.2 和 tensorflow==2.1.0。根据其他答案,我也尝试了 tensorflow==2.0.0-beta0 但它没有解决错误。
有人可以向我解释为什么我会遇到这个错误吗?以及如何解决?
谢谢。
这个中断的原因是,tf.Tensor
TF 2.0.0(和 TF 1.15)有 __len__
超载和 raises an exception。但是例如 TF 1.14 没有 __len__
属性。
因此,任何 TF 1.15+(含)都会中断 keras-rl
(特别是 here),这会给您带来上述错误。所以你有两个选择,
- 降级到 TF 1.14(推荐)
- 删除 TensorFlow 源中的
__len__
重载(不推荐,因为这会破坏其他东西)
对我来说暂时的解决方案是更改这条线
if hasattr(model.output, '__len__') and len(model.output) > 1:
在代理文件中,错误来自哪里,在我的例子中 dqn.py 到 :
if hasattr(model.output, '__len__') and len([model.output.shape.dims.__len__()]) > 1:
我正在尝试在 openAI gym 的一款游戏上实现 DQL 模型。但它给了我以下错误。
TypeError: len is not well defined for symbolic Tensors. (activation_3/Identity:0) Please call
x.shape
rather thanlen(x)
for shape information.
创建健身房环境:
ENV_NAME = 'CartPole-v0'
env = gym.make(ENV_NAME)
np.random.seed(123)
env.seed(123)
nb_actions = env.action_space.n
我的模型是这样的:
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())
将该模型拟合到来自 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)
错误来自这一行:
dqn = DQNAgent(model=model, nb_actions=nb_actions, memory=memory, nb_steps_warmup=10, target_model_update=0.001, policy=policy)
我正在使用 keras-rl==0.4.2 和 tensorflow==2.1.0。根据其他答案,我也尝试了 tensorflow==2.0.0-beta0 但它没有解决错误。
有人可以向我解释为什么我会遇到这个错误吗?以及如何解决?
谢谢。
这个中断的原因是,tf.Tensor
TF 2.0.0(和 TF 1.15)有 __len__
超载和 raises an exception。但是例如 TF 1.14 没有 __len__
属性。
因此,任何 TF 1.15+(含)都会中断 keras-rl
(特别是 here),这会给您带来上述错误。所以你有两个选择,
- 降级到 TF 1.14(推荐)
- 删除 TensorFlow 源中的
__len__
重载(不推荐,因为这会破坏其他东西)
对我来说暂时的解决方案是更改这条线
if hasattr(model.output, '__len__') and len(model.output) > 1:
在代理文件中,错误来自哪里,在我的例子中 dqn.py 到 :
if hasattr(model.output, '__len__') and len([model.output.shape.dims.__len__()]) > 1: