我正在处理一项任务,我需要在多变量时间序列中预测目标变量的第n个值。但在本例中,我们有两个变量:-var1:是表示系统输出的目标变量。-var2:这个时间序列表示一个二进制控制信号(开/关)。
因此,var1根据其先前的值和控制信号(var2)而变化。
我的问题是,给定日期n的输出取决于var 2的最后n值和var 1的最后n值。也就是说,我的网络输入有不同的值(n和n-1)。
在这个场景中,我不确定如何建模我的网络的输入。
我试图使用一个LSTM层作为我的网络的输入,具有二维(var1和var2)。但是,正如我所说,每个“样本”都有n个var2值和n-1个var1值。在这种情况下不可能创建2D数组。
有什么想法吗?
发布于 2022-04-04 09:06:21
您可以创建一种具有两个不同输入的编解码网络。
latent_dim = 16
# First branch of the net is an lstm which finds an embedding for the var1
var_1_inputs = tf.keras.Input(shape=(window_len_1, n_1_features), name='var_1_inputs')
# Encoding var_1
encoder = tf.keras.layers.LSTM(latent_dim, return_state=True, name = 'Encoder')
encoder_outputs, state_h, state_c = encoder(var_1_inputs) # Apply the encoder object to var_1_inputs.
var_2_inputs = tf.keras.Input(shape=(window_len_2, n_2_features), name='var_2_inputs')
# Combining future inputs with recurrent branch output
decoder_lstm = tf.keras.layers.LSTM(latent_dim, return_sequences=True, name = 'Decoder')
x = decoder_lstm(var_2_inputs,
initial_state=[state_h, state_c])
x = tf.keras.layers.Dense(16, activation='relu')(x)
x = tf.keras.layers.Dense(16, activation='relu')(x)
output = tf.keras.layers.Dense(1, activation='relu')(x)
model = tf.keras.models.Model(inputs=[var_1_inputs,var_2_inputs], outputs=output)
optimizer = tf.keras.optimizers.Adam()
loss = tf.keras.losses.Huber()
model.compile(loss=loss, optimizer=optimizer, metrics=["mae"])
model.summary()你在这里,当然,我插入了层的随机数,潜在维度,等等。
您还可以使用var_1和var_2输入不同的特性,这些特性必须作为数组传递。
https://datascience.stackexchange.com/questions/109645
复制相似问题