TypeError: len недостатньо визначений для символічних тензорів. (активація_3 / Ідентифікація: 0) Будь ласка, зателефонуйте на `x.shape`, а не на` len (x) `для інформації про форму


10

Я намагаюся реалізувати модель DQL в одній грі openAI gym. Але це дає мені наступну помилку.

TypeError: len недостатньо визначений для символічних тензорів. (activation_3 / Identity: 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 і tensorflow == 2.1.0. На основі інших відповідей я також спробував tensorflow == 2.0.0-beta0, але це не вирішує помилку.

Чи може мені хтось пояснити, чому я стикаюся з цією помилкою? і як це вирішити?

Дякую.


2
Що таке env? Де lenвідбувається? Або це частина зворотних дзвінків?
Целій Стінгер

env- це ігрове середовище для тренажерних залів для тренування моделі RL. lenвідбувається десь у бібліотеці TensorFlow. Я оновив питання для отримання більш детальної інформації.
vivekpadia70

Відповіді:


3

Причина цієї помилки полягає в тому, що tf.TensorTF 2.0.0 (і TF 1.15) __len__перевантажений і викликає виняток . Але TF 1.14, наприклад, не має __len__атрибута.

Тому будь-який TF 1.15+ (включно) перерв keras-rl(конкретно тут ), що дає вам вищезгадану помилку. Отже, у вас є два варіанти,

  • Перехід до 1,14 TF (рекомендується)
  • Видаліть __len__перевантаження в джерелі TensorFlow ( не рекомендується, оскільки це може порушити інші речі)

Дякую за відповідь. Він ідеально працює на TF 1.14.
vivekpadia70
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.