TypeError: len n'est pas bien défini pour les tenseurs symboliques. (activation_3 / Identité: 0) Veuillez appeler `x.shape` plutôt que` len (x) `pour des informations sur la forme


10

J'essaie d'implémenter un modèle DQL sur un jeu de gym openAI. Mais cela me donne l'erreur suivante.

TypeError: len n'est pas bien défini pour les tenseurs symboliques. (activation_3 / Identité: 0) Veuillez appeler x.shapeplutôt que len(x) pour obtenir des informations sur la forme.

Créer un environnement de gym:

ENV_NAME = 'CartPole-v0'

env = gym.make(ENV_NAME)
np.random.seed(123)
env.seed(123)
nb_actions = env.action_space.n

Mon modèle ressemble à ceci:

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())

Ajustement de ce modèle au modèle DQN de keral-rl comme suit:

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)

L'erreur vient de cette ligne:

dqn = DQNAgent(model=model, nb_actions=nb_actions, memory=memory, nb_steps_warmup=10, target_model_update=0.001, policy=policy)

J'utilise keras-rl == 0.4.2 et tensorflow == 2.1.0. Sur la base d'autres réponses, j'ai également essayé tensorflow == 2.0.0-beta0 mais cela ne résout pas l'erreur.

Quelqu'un peut-il m'expliquer pourquoi je fais face à cette erreur? et comment le résoudre?

Je vous remercie.


2
Qu'est-ce que c'est env? Où lense déroule-t-il? Ou cela fait-il partie des rappels?
Celius Stingher

envest un environnement de jeu de gym pour l'entraînement du modèle RL. lense déroule quelque part dans la bibliothèque TensorFlow. J'ai mis à jour la question pour plus de détails.
vivekpadia70

Réponses:


3

La raison de cette rupture est que tf.TensorTF 2.0.0 (et TF 1.15) est __len__surchargé et déclenche une exception . Mais TF 1.14 par exemple n'a pas d' __len__attribut.

Par conséquent, tout ce que TF 1.15+ (inclus) casse keras-rl(spécifiquement ici ), ce qui vous donne l'erreur ci-dessus. Vous avez donc deux options,

  • Rétrograder vers TF 1.14 (recommandé)
  • Supprimez la __len__surcharge dans la source TensorFlow ( non recommandé car cela peut casser d'autres choses)

Merci d'avoir répondu. Cela fonctionne parfaitement sur TF 1.14.
vivekpadia70
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.