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.shape
plutôt quelen(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.
python
tensorflow
keras
reinforcement-learning
keras-rl
vivekpadia70
la source
la source
env
? Oùlen
se déroule-t-il? Ou cela fait-il partie des rappels?env
est un environnement de jeu de gym pour l'entraînement du modèle RL.len
se déroule quelque part dans la bibliothèque TensorFlow. J'ai mis à jour la question pour plus de détails.Réponses:
La raison de cette rupture est que
tf.Tensor
TF 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,__len__
surcharge dans la source TensorFlow ( non recommandé car cela peut casser d'autres choses)la source