สมมติว่าคุณมีข้อมูลอนุกรมเวลาที่มีแถวแถวและคอลัมน์คอลัมน์ที่คุณต้องการป้อนไปยังชั้นหนึ่งใน Keras ก่อนที่คุณจะป้อนข้อมูลนั้นไปยัง RNN คุณจะต้องปรับแต่งข้อมูลก่อนหน้านี้เป็นเมตริกซ์ 3 มิติ ดังนั้นมันจะกลายเป็น1N700SimpleRNN(200, return_sequence=True)
N×700×1
ภาพนี้นำมาจาก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? เพราะคุณต้องการให้แต่ละค่าการประทับเวลาแยกกัน
ทำไมแต่ละค่าการประทับเวลาแยกกัน? เพราะ:
- คุณต้องการโต้ตอบค่าระหว่างการประทับเวลาของมันเท่านั้น
- คุณไม่ต้องการให้มีการโต้ตอบแบบสุ่มระหว่างเวลาและช่องต่างๆ