TypeError: len ไม่ได้กำหนดไว้อย่างดีสำหรับเทนเซอร์แบบสัญลักษณ์ (activation_3 / ข้อมูลประจำตัว: 0) กรุณาโทร `x.shape` แทน` len (x) `สำหรับข้อมูลรูปร่าง


10

ฉันกำลังพยายามใช้โมเดล DQL ในหนึ่งเกมของโรงยิม openAI แต่มันทำให้ฉันผิดพลาด

TypeError: len ไม่ได้กำหนดไว้อย่างดีสำหรับเทนเซอร์แบบสัญลักษณ์ (activation_3 / บัตรประจำตัว: 0) กรุณาโทรx.shapeมากกว่าlen(x) สำหรับข้อมูลรูปร่าง

การสร้างสภาพแวดล้อมในโรงยิม:

ENV_NAME = 'CartPole-v0'

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

แบบจำลองของฉันมีลักษณะเช่นนี้:

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

การติดตั้งโมเดลนั้นกับโมเดล DQN จาก keral-rl ดังต่อไปนี้:

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)

ข้อผิดพลาดมาจากบรรทัดนี้:

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

ฉันใช้ keras-rl == 0.4.2 และ tensorflow == 2.1.0 จากคำตอบอื่น ๆ ฉันก็ลองใช้ tensorflow == 2.0.0-beta0 แต่ก็ไม่ได้แก้ปัญหา

มีใครช่วยอธิบายให้ฉันหน่อยได้ไหม และวิธีแก้ปัญหา

ขอบคุณ.


2
คือenvอะไร เป็นที่lenเกิดขึ้น? หรือเป็นส่วนหนึ่งของการเรียกกลับหรือไม่
Celius Stingher

envเป็นสภาพแวดล้อมของเกมยิมสำหรับการฝึกอบรมแบบ RL lenเกิดขึ้นที่ไหนสักแห่งในห้องสมุด TensorFlow ฉันได้อัปเดตคำถามสำหรับรายละเอียดเพิ่มเติมแล้ว
vivekpadia70

คำตอบ:


3

เหตุผลที่แบ่งนี้เป็นเพราะtf.TensorTF 2.0.0 (และ TF 1.15) มี__len__มากเกินไปและทำให้เกิดข้อยกเว้น แต่ตัวอย่าง TF 1.14 ไม่มี__len__แอตทริบิวต์

ดังนั้นสิ่งใดที่ TF 1.15+ (รวม) หยุดพักkeras-rl(เฉพาะที่นี่ ) ซึ่งให้ข้อผิดพลาดด้านบน ดังนั้นคุณมีสองทางเลือก

  • ปรับลดรุ่นเป็น TF 1.14 (แนะนำ)
  • ลบการ__len__โอเวอร์โหลดในแหล่งที่มาของ TensorFlow ( ไม่แนะนำเนื่องจากอาจทำให้สิ่งอื่น ๆเสียหาย)

ขอบคุณสำหรับคำตอบ. มันทำงานได้อย่างสมบูรณ์บน TF 1.14
vivekpadia70
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.