具有隐藏状态Tensorflow 2.0的LSTM的定制keras时间序列生成器

时间:2019-12-12 14:30:17

标签: python keras time-series lstm tensorflow2.0

我正在训练一个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类,还是用简单的方法为模型提供数据?

0 个答案:

没有答案