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.