Я пытаюсь реализовать модель DQL в одной игре openAI. Но это дает мне следующую ошибку.
TypeError: len плохо определено для символических тензоров. (активация_3 / идентификатор: 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())
Подгонка этой модели к модели DQN от keral-rl следующим образом:
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 и тензор потока == 2.1.0. Основываясь на других ответах, я также попытался использовать tenorflow == 2.0.0-beta0, но это не помогло устранить ошибку.
Может кто-нибудь объяснить мне, почему я сталкиваюсь с этой ошибкой? и как это решить?
Спасибо.
python
tensorflow
keras
reinforcement-learning
keras-rl
vivekpadia70
источник
источник
env
? Гдеlen
происходит? Или это часть обратных вызовов?env
игровая среда для тренировок модели RLlen
происходит где-то в библиотеке TensorFlow. Я обновил вопрос для более подробной информации.Ответы:
Причиной этого является то, что
tf.Tensor
TF 2.0.0 (и TF 1.15)__len__
перегружен и вызывает исключение . Но TF 1.14, например, не имеет__len__
атрибута.Поэтому все, что TF 1.15+ (включительно) ломается
keras-rl
(именно здесь ), что дает вам вышеуказанную ошибку. Итак, у вас есть два варианта,__len__
перегрузку в источнике TensorFlow ( не рекомендуется, так как это может сломать другие вещи)источник