ดังนั้น:
ตัวต่อตัว : คุณสามารถใช้Dense
เลเยอร์ได้เนื่องจากคุณไม่ได้ประมวลผลลำดับ:
model.add(Dense(output_size, input_shape=input_shape))
แบบตัวต่อตัว : ตัวเลือกนี้ไม่ได้รับการสนับสนุนเช่นเดียวกับโมเดลการผูกมัดนั้นไม่ง่ายKeras
นักดังนั้นเวอร์ชันต่อไปนี้จึงเป็นเวอร์ชันที่ง่ายที่สุด:
model.add(RepeatVector(number_of_times, input_shape=input_shape))
model.add(LSTM(output_size, return_sequences=True))
หลายต่อหนึ่ง : จริงๆแล้วข้อมูลโค้ดของคุณ (เกือบ) เป็นตัวอย่างของแนวทางนี้:
model = Sequential()
model.add(LSTM(1, input_shape=(timesteps, data_dim)))
หลายต่อหลายคน : นี่เป็นตัวอย่างข้อมูลที่ง่ายที่สุดเมื่อความยาวของอินพุตและเอาต์พุตตรงกับจำนวนขั้นตอนที่เกิดซ้ำ:
model = Sequential()
model.add(LSTM(1, input_shape=(timesteps, data_dim), return_sequences=True))
หลายต่อหลายคนเมื่อจำนวนขั้นตอนแตกต่างจากความยาวอินพุต / เอาต์พุต : นี่เป็นเรื่องที่ผิดปกติใน Keras ไม่มีข้อมูลโค้ดง่ายๆในการเขียนโค้ดนั้น
แก้ไข: โฆษณา 5
ในหนึ่งในแอปพลิเคชันล่าสุดของฉันเราได้ใช้บางสิ่งที่อาจคล้ายกับหลายต่อหลายคนจากภาพที่ 4 ในกรณีที่คุณต้องการมีเครือข่ายที่มีสถาปัตยกรรมต่อไปนี้ (เมื่ออินพุตยาวกว่าเอาต์พุต):
O O O
| | |
O O O O O O
| | | | | |
O O O O O O
คุณสามารถทำได้ในลักษณะต่อไปนี้:
model = Sequential()
model.add(LSTM(1, input_shape=(timesteps, data_dim), return_sequences=True))
model.add(Lambda(lambda x: x[:, -N:, :]
N
จำนวนขั้นตอนสุดท้ายที่คุณต้องการครอบคลุมอยู่ที่ไหน(บนภาพN = 3
)
จากจุดนี้ไปที่:
O O O
| | |
O O O O O O
| | |
O O O
ง่ายพอ ๆ กับลำดับความยาวของช่องว่างเทียมN
โดยใช้เช่นกับ0
เวกเตอร์เพื่อปรับให้มีขนาดที่เหมาะสม