Estoy tratando de implementar un modelo DQL en un juego de gimnasio openAI. Pero me está dando el siguiente error.
TypeError: len no está bien definido para los tensores simbólicos. (activación_3 / Identidad: 0) Llame en
x.shape
lugar delen(x)
para obtener información sobre la forma.
Crear un ambiente de gimnasio:
ENV_NAME = 'CartPole-v0'
env = gym.make(ENV_NAME)
np.random.seed(123)
env.seed(123)
nb_actions = env.action_space.n
Mi modelo se ve así:
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())
Ajuste de ese modelo al modelo DQN de keral-rl de la siguiente manera:
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)
El error es de esta línea:
dqn = DQNAgent(model=model, nb_actions=nb_actions, memory=memory, nb_steps_warmup=10, target_model_update=0.001, policy=policy)
Estoy usando keras-rl == 0.4.2 y tensorflow == 2.1.0. Basado en otras respuestas, también probé tensorflow == 2.0.0-beta0 pero no resuelve el error.
¿Alguien puede explicarme por qué me enfrento a este error? ¿Y como resolverlo?
Gracias.
python
tensorflow
keras
reinforcement-learning
keras-rl
vivekpadia70
fuente
fuente
env
? ¿Dónde estálen
teniendo lugar? ¿O es parte de las devoluciones de llamada?env
es un entorno de juego de gimnasia para entrenar el modelo RL.len
está teniendo lugar en algún lugar de la biblioteca TensorFlow. He actualizado la pregunta para más detalles.Respuestas:
La razón por la que esto se rompe es porque
tf.Tensor
TF 2.0.0 (y TF 1.15) tiene la__len__
sobrecarga y genera una excepción . Pero TF 1.14, por ejemplo, no tiene el__len__
atributo.Por lo tanto, cualquier cosa TF 1.15+ (inclusive) se rompe
keras-rl
(específicamente aquí ), lo que le da el error anterior. Entonces tienes dos opciones,__len__
sobrecarga en la fuente TensorFlow ( no se recomienda ya que esto puede romper otras cosas)fuente