TypeError:len对于符号张量没有很好的定义。(activation_3 / Identity:0)请致电`x.shape`而不是`len(x)`以获得形状信息


10

我正在尝试在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

我的模型如下所示:

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,但它不能解决错误。

有人可以向我解释为什么我会遇到此错误吗?以及如何解决?

谢谢。


2
什么env啊 发生在哪里len?还是它是回调的一部分?
Celius Stingher

env是用于训练RL模型的健身游戏环境。len在TensorFlow库中的某个地方发生。我已经更新了问题以获取更多详细信息。
vivekpadia70

Answers:


3

中断的原因是因为tf.TensorTF 2.0.0(和TF 1.15)具有__len__重载并引发异常。但是例如TF 1.14没有该__len__属性。

因此,任何TF 1.15+(含)以上的中断keras-rl(具体在此处)都会给您带来上述错误。所以你有两个选择,

  • 降级为TF 1.14(推荐)
  • 删除__len__TensorFlow源代码中的重载(不建议这样做,因为这可能会破坏其他功能)

感谢您的回答。它在TF 1.14上运行良好。
vivekpadia70
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.