ความแตกต่างระหว่าง "หนาแน่น" และ "เวลากระจาย" ของ Keras`


34

ฉันยังคงสับสนเกี่ยวกับความแตกต่างระหว่างDenseและTimeDistributedDenseของKerasแม้ว่าจะมีอยู่แล้วบางคำถามที่คล้ายกันถามที่นี่และที่นี่ ผู้คนกำลังพูดคุยกันมากมาย แต่ไม่มีข้อสรุปที่ตกลงร่วมกัน

และถึงแม้ว่าที่นี่ @fchollet ระบุว่า:

TimeDistributedDenseใช้การดำเนินการเดียวกันDense(เชื่อมต่อแบบเต็ม) กับทุกการประทับเวลาของ 3D tensor

ฉันยังต้องการภาพประกอบโดยละเอียดเกี่ยวกับความแตกต่างระหว่างพวกเขา

คำตอบ:


41

สมมติว่าคุณมีข้อมูลอนุกรมเวลาที่มีแถวแถวและคอลัมน์คอลัมน์ที่คุณต้องการป้อนไปยังชั้นหนึ่งใน Keras ก่อนที่คุณจะป้อนข้อมูลนั้นไปยัง RNN คุณจะต้องปรับแต่งข้อมูลก่อนหน้านี้เป็นเมตริกซ์ 3 มิติ ดังนั้นมันจะกลายเป็น1N700SimpleRNN(200, return_sequence=True)N×700×1

ไม่ได้ควบคุม RNN

ภาพนี้นำมาจากhttps://colah.github.io/posts/2015-08-Understanding-LSTMs

ใน RNN คอลัมน์ของคุณ ("700 คอลัมน์") เป็นเวลาของ RNN ข้อมูลของคุณจะถูกประมวลผลจาก700 หลังจากให้อาหารข้อมูลไปยัง RNN ตอนนี้ก็มีเอาท์พุท 700 ซึ่งเป็นเพื่อไม่เพื่อ{200} โปรดจำไว้ว่าตอนนี้รูปร่างของข้อมูลของคุณเป็นซึ่งเป็นตัวอย่าง (แถว) x timesteps (คอลัมน์) x ช่องt=1 to 700h1h700h1h200N×700×200

จากนั้นเมื่อคุณใช้ a TimeDistributedDenseคุณจะใช้Denseเลเยอร์ในแต่ละการประทับเวลาซึ่งหมายความว่าคุณใช้Denseเลเยอร์ในแต่ละ , , ... ,ตามลำดับ ซึ่งหมายถึง: จริงคุณกำลังใช้การดำเนินการอย่างเต็มที่ที่เกี่ยวโยงกันในแต่ละช่องทาง (ที่ "200" หนึ่ง) ตามลำดับจากเพื่อ{700} ค่า "คูณคูณ " จนถึงวันที่ 700 "คูณคูณ "h1h2hth1h7001×1×2001×1×200

เราจะทำเช่นนี้ทำไม? เพราะคุณไม่ต้องการแผ่เอาต์พุต RNN

ทำไมไม่แบนเอาท์พุท RNN? เพราะคุณต้องการให้แต่ละค่าการประทับเวลาแยกกัน

ทำไมแต่ละค่าการประทับเวลาแยกกัน? เพราะ:

  • คุณต้องการโต้ตอบค่าระหว่างการประทับเวลาของมันเท่านั้น
  • คุณไม่ต้องการให้มีการโต้ตอบแบบสุ่มระหว่างเวลาและช่องต่างๆ

จากนั้นเมื่อคุณใช้ TimeDistributedDense คุณจะใช้เลเยอร์หนาแน่นในแต่ละการประทับเวลา -> ซึ่งหมายความว่าการประทับเวลาแต่ละครั้งจะแบ่งน้ำหนักของเลเยอร์หนาแน่นหรือไม่ ด้วยเลเยอร์หนาแน่นไม่เพียงใช้กับการประทับเวลาครั้งสุดท้ายเท่านั้น?
o0omycomputero0o

2
ทำไมไม่ TimeDistributedDense ไม่ได้ใช้ในตัวอย่าง Keras ที่blog.keras.io/... ?
user1934212

เนื่องจาก TimeDistributedDense เลิกใช้แล้ว ตั้งแต่ Keras 2.0, Dense สามารถจัดการกับ> เทนเซอร์ 2 มิติได้ดี
rilut
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.