TypeError: len non è ben definito per i tensori simbolici. (Activation_3 / Identità: 0) Si prega di chiamare `x.shape` anziché` len (x) `per informazioni sulla forma


10

Sto cercando di implementare un modello DQL su un gioco di palestra openAI. Ma mi sta dando il seguente errore.

TypeError: len non è ben definito per i tensori simbolici. (Activation_3 / Identità: 0) Si prega di chiamare x.shapepiuttosto che len(x) per informazioni sulla forma.

Creare un ambiente palestra:

ENV_NAME = 'CartPole-v0'

env = gym.make(ENV_NAME)
np.random.seed(123)
env.seed(123)
nb_actions = env.action_space.n

Il mio modello è simile al seguente:

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())

Montando quel modello sul modello DQN da keral-rl come segue:

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)

L'errore proviene da questa riga:

dqn = DQNAgent(model=model, nb_actions=nb_actions, memory=memory, nb_steps_warmup=10, target_model_update=0.001, policy=policy)

Sto usando keras-rl == 0.4.2 e tensorflow == 2.1.0. Sulla base di altre risposte, ho anche provato tensorflow == 2.0.0-beta0 ma non risolve l'errore.

Qualcuno può spiegarmi perché sto affrontando questo errore? e come risolverlo?

Grazie.


2
Che cosa è env? Dove sta lensuccedendo? O fa parte dei callback?
Celius Stingher il

envè un ambiente di gioco in palestra per l'allenamento del modello RL. lensi sta svolgendo da qualche parte nella libreria TensorFlow. Ho aggiornato la domanda per maggiori dettagli.
vivekpadia70

Risposte:


3

Il motivo per cui si rompe è perché, tf.TensorTF 2.0.0 (e TF 1.15) ha il __len__sovraccarico e solleva un'eccezione . Ma TF 1.14 per esempio non ha l' __len__attributo.

Pertanto, qualsiasi cosa TF 1.15+ (incluso) si rompe keras-rl(in particolare qui ), che ti dà l'errore di cui sopra. Quindi hai due opzioni,

  • Esegui il downgrade a TF 1.14 (consigliato)
  • Elimina il __len__sovraccarico nella sorgente TensorFlow ( sconsigliato in quanto ciò potrebbe interrompere altre cose)

Grazie per la risposta. Funziona perfettamente su TF 1.14.
vivekpadia70,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.