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.shapelugar 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álenteniendo lugar? ¿O es parte de las devoluciones de llamada?enves un entorno de juego de gimnasia para entrenar el modelo RL.lenestá 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.TensorTF 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