Так:
Один на один : ви можете використовувати 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))
Багато-багато-багато, коли кількість кроків відрізняється від довжини вводу / виводу : це важко важко в Керасі. Немає простих фрагментів коду, щоб кодувати це.
Редагувати: Об'ява 5
В одному з моїх останніх застосувань ми реалізували щось, що може бути подібним багатьом до багатьох із четвертого зображення. Якщо ви хочете мати мережу із такою архітектурою (коли вхід довший, ніж вихід):
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
векторами, щоб відрегулювати її відповідно до розміру.