TypeError: len không được xác định rõ cho các biểu tượng kéo. (activ_3 / Danh tính: 0) Vui lòng gọi `x.shape` thay vì` len (x)` để biết thông tin hình dạng


10

Tôi đang cố gắng thực hiện mô hình DQL trên một trò chơi của phòng tập thể dục openAI. Nhưng nó cho tôi lỗi sau.

TypeError: len không được xác định rõ cho các biểu tượng kéo. (activ_3 / Danh tính: 0) Vui lòng gọi x.shapethay vì len(x) thông tin hình dạng.

Tạo môi trường tập thể dục:

ENV_NAME = 'CartPole-v0'

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

Mô hình của tôi trông như thế này:

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

Lắp mô hình đó vào mô hình DQN từ keral-rl như sau:

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ỗi là từ dòng này:

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

Tôi đang sử dụng keras-rl == 0.4.2 và tenorflow == 2.1.0. Dựa trên các câu trả lời khác, tôi cũng đã thử dùng tenorflow == 2.0.0-beta0 nhưng nó không giải quyết được lỗi.

Ai đó có thể vui lòng giải thích cho tôi tại sao tôi phải đối mặt với lỗi này? và làm thế nào để giải quyết nó?

Cảm ơn bạn.


2
envgì Nơi nào đang lendiễn ra? Hay nó là một phần của cuộc gọi lại?
Celius Stingher

envlà một môi trường trò chơi phòng tập thể dục để đào tạo mô hình RL. lenđang diễn ra ở đâu đó trong thư viện TensorFlow. Tôi đã cập nhật câu hỏi để biết thêm chi tiết.
vivekpadia70

Câu trả lời:


3

Lý do phá vỡ là vì, tf.TensorTF 2.0.0 (và TF 1.15) đã __len__quá tải và đưa ra một ngoại lệ . Nhưng ví dụ TF 1.14 không có __len__thuộc tính.

Do đó, bất cứ điều gì TF 1.15+ (bao gồm) phá vỡ keras-rl(cụ thể ở đây ), sẽ cung cấp cho bạn lỗi trên. Vì vậy, bạn có hai lựa chọn,

  • Hạ cấp xuống TF 1.14 (được khuyến nghị)
  • Xóa __len__quá tải trong nguồn TensorFlow ( không được khuyến nghị vì điều này có thể phá vỡ những thứ khác)

Cảm ơn câu trả lời. Nó hoạt động hoàn hảo trên TF 1.14.
vivekpadia70
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.