Python 不带y值的拟合keras模型
我正在用Keras建立一个模型来预测2周的一系列大气压力值。下面是我使用的模型结构:Python 不带y值的拟合keras模型,python,tensorflow,machine-learning,keras,Python,Tensorflow,Machine Learning,Keras,我正在用Keras建立一个模型来预测2周的一系列大气压力值。下面是我使用的模型结构: self.model = Sequential() self.model.add(CuDNNLSTM(256, return_sequences=False, input_shape=(None, 2))) self.model.add(RepeatVector(336)) # 336 corresponds to 2 weeks of hourly values (24 x 14) self.model.a
self.model = Sequential()
self.model.add(CuDNNLSTM(256, return_sequences=False, input_shape=(None, 2)))
self.model.add(RepeatVector(336)) # 336 corresponds to 2 weeks of hourly values (24 x 14)
self.model.add(CuDNNLSTM(128, return_sequences=True))
self.model.add(TimeDistributed(Dense(2)))
(注意:CuDNNLSTM
层与Keras中的LSTM
层相同,但在Nvidia gpu上运行速度更快)
对于模型的训练,x
的形式为[n_样本,n_时间步,n_特征]
,其中n_样本
是训练系列的数量(每个气象站有一个),n_time_steps
是每个系列每小时的数据点数量,n_features
是每个时间步的特征数量(在这种情况下,第一个特征是大气压力,第二个特征是0或1,具体取决于天气条件)。所有的训练数据都在-1和1之间标准化
y
的结构与x
相同,但它包含x
中2周小时数据之后的2周的小时数据
该模型经过训练,验证损失为0.28115。当我在看不见的数据上使用模型进行预测时,预测遵循一天中上升和下降的正确模式,但是,它们没有达到正确的峰值和低点,因为每个系列略有不同。为了解决这个问题,我通常会在预测将权重稍微调整到特定序列之前,在特定序列上拟合一次通用模型。问题是,我没有足够的数据来生成x
和y
以输入model.fit(),因为y
需要336个时间步
是否有一种方法可以在不指定y
的情况下拟合模型?我建立了一个模型,在一个循环中一次做一个小时的预测,而不是一次做所有的预测,从而绕过了这个问题。然而,我希望能够立即预测整个2周系列。有没有更好的办法
此外,是否有可能让模型只预测大气压力特征而不预测另一个二元特征?这会影响性能吗?我通常会在Sequential()
模型的末尾添加一个Dense(1)
层,如下面的示例所示,但我不知道在进一步使用RepeatVector()
层时如何做到这一点。(使用RepeatVector()
层一次预测多个时间步)
self.model = Sequential()
self.model.add(CuDNNLSTM(256, return_sequences=True, input_shape=(None, 2)))
self.model.add(CuDNNLSTM(128, return_sequences=False))
self.model.add(Dense(1))