Я пытаюсь построить многовариантный (100, 20, 23), многоканальный [(100, 20, 1), (100, 20, 1), (100, 20, 1)] sequence2sequence кодировщик-декодер. В интернете не так много примеров. Тем не менее, я нашел этот учебник о модели LSTM кодера-декодера с многовариантными входными последовательностями и одиночными выходными последовательностями, и я хотел бы обобщить это для множественного выхода. Я попытался код ниже, но я получаю ошибку значения w.r.t. к разным распределенным по времени слоям. Смотрите трассировку ниже. Когда я объединяю выходные данные (100, 20, 3), модель компилируется и подходит соответственно
Есть идеи, как это исправить для полученных результатов, в которые данные можно подавать отдельно?
from keras.layers import *
from keras import Model
n_features = 23
hl2 = 150
window_len = 20
epochs = 5
batch_size = 128
features = np.random.rand(100, 20, 23)
targ1 = np.random.rand(100, 20, 1)
targ2 = np.random.rand(100, 20, 1)
targ3 = np.random.rand(100, 20, 1)
input_ = Input(shape=(window_len, n_features))
encoder_LSTM = LSTM(hl2, kernel_initializer='glorot_normal')(input_)
rep_vec = RepeatVector(window_len)(encoder_LSTM)
decoder_LSTM = LSTM(hl2, return_sequences=True)(rep_vec)
time_wrapper = TimeDistributed(Dense(int(hl2/2), activation='relu'))(decoder_LSTM)
out1 = TimeDistributed(
Dense(3, activation='linear', name='out1',
kernel_initializer='glorot_normal'))(time_wrapper)
out2 = TimeDistributed(
Dense(1, activation='linear', name='out2',
kernel_initializer='glorot_normal')
)(time_wrapper)
out3 = TimeDistributed(
Dense(1, activation='linear', name='out3',
kernel_initializer='glorot_normal')
)(time_wrapper)
model = Model(inputs=input_, outputs=[out1, out2, out3])
model.compile(loss='mean_squared_error', optimizer='adam')
model.fit(
features,
{
'out1': out3,
'out2': out3,
'out3': out3,
},
epochs=epochs,
batch_size=batch_size,
verbose=0,
shuffle='batch'
)
См. Трекбек ниже
Traceback (most recent call last):
File "C:/Users/Master Tk/PycharmProjects/FPL/encoder.py", line 49, in <module>
shuffle='batch'
File "C:\Miniconda3\lib\site-packages\keras\engine\training.py", line 952, in fit
batch_size=batch_size)
File "C:\Miniconda3\lib\site-packages\keras\engine\training.py", line 789, in _standardize_user_data
exception_prefix='target')
File "C:\Miniconda3\lib\site-packages\keras\engine\training_utils.py", line 78, in standardize_input_data
'for each key in: ' + str(names))
ValueError: No data provided for "time_distributed_2". Need data for each key in: ['time_distributed_2', 'time_distributed_3', 'time_distributed_4']