Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 不带y值的拟合keras模型_Python_Tensorflow_Machine Learning_Keras - Fatal编程技术网

Python 不带y值的拟合keras模型

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

我正在用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.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))