我正在训练一个LSTM模型,该模型用于多个独立时间序列,其分类特征为隐藏状态。我正在尝试使用keras TimeSeriesGenerator和failig创建正确的输入数据。这是我的模型架构:
input_models=[]
output_embeddings=[]
numerics = ['int16', 'int32', 'int64', 'float16', 'float32', 'float64']
emb_shape = 0
for categorical_var in categorical_vars:
#Name of the categorical variable that will be used in the Keras Embedding layer
cat_emb_name= categorical_var.replace(" ", "")+'_Embedding'
# Define the embedding_size
no_of_unique_cat = dataset[categorical_var].nunique() + 1
embedding_size = int(min(np.ceil((no_of_unique_cat)/2), 50 ))
#One Embedding Layer for each categorical variable
input_model = Input(shape=(1,), name=categorical_var.replace(" ", "")+'_Input')
output_model = Embedding(input_dim=no_of_unique_cat,
output_dim=embedding_size,
input_length=NUM_SAMPLES,
name=cat_emb_name)(input_model)
output_model = Reshape(target_shape=(embedding_size,),
name=categorical_var.replace(" ", "")+'_Reshape')(output_model)
input_models.append(input_model)
output_embeddings.append(output_model)
input_numeric = Input(shape=(TIME_STEPS,2), name='timeseries_Input')
input_models.append(input_numeric)
initial_embeddings = Concatenate(name='concatenated_inputs')(output_embeddings)
n_steps_out = 6
n_features = 2
output = LSTM(initial_embeddings.get_shape()[-1],
activation='relu',
name='LSTM_with_hidden')(input_numeric,
initial_state=[initial_embeddings, initial_embeddings])
output = RepeatVector(n_steps_out)(output)
output = LSTM(50, activation='relu', return_sequences=True)(output)
output = TimeDistributed(Dense(1), name='Predicted_sequence')(output)
model = Model(inputs=input_models, outputs=output)
print('MODEL COMPILE')
model.compile(loss='mean_squared_error', optimizer='Adam', metrics=['mse','mape'])
print(model.summary())
现在,我想为每个时间序列的时间序列生成器拟合模型。但是我对此完全感到困惑。
我应该编写自己的timeseriesgenerator类,还是用简单的方法为模型提供数据?