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.

vivekpadia70
sumber
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)
thushv89
sumber
Terima kasih atas jawabannya. Ini berfungsi dengan baik pada TF 1.14.
vivekpadia70