TypeError: len tidak didefinisikan dengan baik untuk Tensor simbolik. (aktivasi_3 / Identitas: 0) Silakan hubungi `x.shape` daripada` len (x) `untuk informasi bentuk


10

Saya mencoba menerapkan model DQL pada satu permainan gym openAI. Tapi itu memberi saya kesalahan berikut.

TypeError: len tidak didefinisikan dengan baik untuk Tensor simbolik. (aktivasi_3 / Identitas: 0) Silakan hubungi x.shapedaripada len(x) untuk informasi bentuk.

Menciptakan lingkungan gym:

ENV_NAME = 'CartPole-v0'

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

Model saya terlihat seperti ini:

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

Menyesuaikan model itu ke model DQN dari keral-rl sebagai berikut:

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)

Kesalahan berasal dari baris ini:

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

Saya menggunakan keras-rl == 0.4.2 dan tensorflow == 2.1.0. Berdasarkan jawaban lain, saya juga mencoba tensorflow == 2.0.0-beta0 tetapi tidak menyelesaikan kesalahan.

Bisakah seseorang tolong jelaskan kepada saya mengapa saya menghadapi kesalahan ini? dan bagaimana cara mengatasinya?

Terima kasih.


2
Apa env? Dimana lentempatnya? Atau itu bagian dari panggilan balik?
Celius Stingher

envadalah lingkungan permainan olahraga untuk melatih model RL. lensedang berlangsung di suatu tempat di perpustakaan TensorFlow. Saya telah memperbarui pertanyaan untuk lebih jelasnya.
vivekpadia70

Jawaban:


3

Alasan jeda ini adalah karena, tf.TensorTF 2.0.0 (dan TF 1.15) memiliki __len__kelebihan beban dan memunculkan pengecualian . Tetapi TF 1.14 misalnya tidak memiliki __len__atribut.

Karenanya, apa pun TF 1.15+ (inklusif) rusak keras-rl(khusus di sini ), yang memberi Anda kesalahan di atas. Jadi Anda punya dua opsi,

  • Turunkan ke TF 1.14 (disarankan)
  • Hapus __len__overloading di sumber TensorFlow ( tidak disarankan karena ini dapat merusak hal lain)

Terima kasih atas jawabannya. Ini berfungsi dengan baik pada TF 1.14.
vivekpadia70
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.