Vì thế:
Một-một : bạn có thể sử dụng một Dense
lớp vì bạn không xử lý các trình tự:
model.add(Dense(output_size, input_shape=input_shape))
Một-nhiều : tùy chọn này không được hỗ trợ cũng như các mô hình chuỗi không dễ sử dụng Keras
, vì vậy phiên bản sau là phiên bản dễ dàng nhất:
model.add(RepeatVector(number_of_times, input_shape=input_shape))
model.add(LSTM(output_size, return_sequences=True))
Nhiều-một : thực ra, đoạn mã của bạn (gần như) là một ví dụ về phương pháp này:
model = Sequential()
model.add(LSTM(1, input_shape=(timesteps, data_dim)))
Nhiều-nhiều : Đây là đoạn mã dễ nhất khi độ dài của đầu vào và đầu ra khớp với số bước lặp lại:
model = Sequential()
model.add(LSTM(1, input_shape=(timesteps, data_dim), return_sequences=True))
Nhiều-nhiều khi số lượng các bước khác với độ dài đầu vào / đầu ra : điều này thật là khó trong Keras. Không có đoạn mã dễ dàng để viết mã đó.
CHỈNH SỬA: Quảng cáo 5
Trong một trong những ứng dụng gần đây của tôi, chúng tôi đã triển khai một cái gì đó có thể giống với nhiều-nhiều từ hình ảnh thứ 4. Trong trường hợp bạn muốn có một mạng với kiến trúc sau (khi đầu vào dài hơn đầu ra):
O O O
| | |
O O O O O O
| | | | | |
O O O O O O
Bạn có thể đạt được điều này theo cách sau:
model = Sequential()
model.add(LSTM(1, input_shape=(timesteps, data_dim), return_sequences=True))
model.add(Lambda(lambda x: x[:, -N:, :]
Trong trường hợp N
là số lượng các bước cuối cùng bạn muốn để trang trải (trên hình N = 3
).
Từ thời điểm này đi đến:
O O O
| | |
O O O O O O
| | |
O O O
đơn giản như chuỗi đệm nhân tạo có độ dài N
bằng cách sử dụng 0
vectơ, ví dụ , để điều chỉnh nó thành kích thước thích hợp.