Ich versuche, ein DQL-Modell für ein Spiel von openAI Gym zu implementieren. Aber es gibt mir folgenden Fehler.
TypeError: len ist für symbolische Tensoren nicht gut definiert. (Aktivierung_3 / Identität: 0) Bitte
x.shape
eher anrufen alslen(x)
Informationen zur Form zu erhalten.
Erstellen einer Fitnessumgebung:
ENV_NAME = 'CartPole-v0'
env = gym.make(ENV_NAME)
np.random.seed(123)
env.seed(123)
nb_actions = env.action_space.n
Mein Modell sieht so aus:
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())
Anpassen dieses Modells an das DQN-Modell von keral-rl wie folgt:
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)
Der Fehler stammt aus dieser Zeile:
dqn = DQNAgent(model=model, nb_actions=nb_actions, memory=memory, nb_steps_warmup=10, target_model_update=0.001, policy=policy)
Ich benutze keras-rl == 0.4.2 und tensorflow == 2.1.0. Basierend auf anderen Antworten habe ich auch Tensorflow == 2.0.0-beta0 ausprobiert, aber es löst den Fehler nicht.
Kann mir bitte jemand erklären, warum ich mit diesem Fehler konfrontiert bin? und wie man es löst?
Vielen Dank.
python
tensorflow
keras
reinforcement-learning
keras-rl
vivekpadia70
quelle
quelle
env
? Wo findet daslen
statt? Oder ist es Teil der Rückrufe?env
ist eine Fitness-Spielumgebung zum Trainieren des RL-Modells.len
findet irgendwo in der TensorFlow-Bibliothek statt. Ich habe die Frage für weitere Details aktualisiert.Antworten:
Der Grund dafür ist, dass
tf.Tensor
TF 2.0.0 (und TF 1.15)__len__
überlastet sind und eine Ausnahme auslösen . Aber TF 1.14 zum Beispiel hat das__len__
Attribut nicht.Daher bricht alles, was TF 1.15+ (einschließlich) ist
keras-rl
(speziell hier ), was Ihnen den obigen Fehler gibt. Sie haben also zwei Möglichkeiten:__len__
Überladung in der TensorFlow-Quelle ( nicht empfohlen, da dies andere Probleme verursachen kann).quelle