我有250天的数据,72个训练样本的特征和一列目标变量。并希望预测未来30天的21351行每个具有72个功能。我将如何重塑输入和输出的数据。似乎我有点混乱,图书馆给我一个关于形状不兼容的错误。
我正在重塑:
trainX.reshape(1, len(trainX), trainX.shape[1])
trainY.reshape(1, len(trainX))
但是给我错误:
ValueError:输入数组应与目标数组具有相同数量的样本。找到1个输入样本和250个目标样本。
同样的错误:
trainX.reshape(1, len(trainX), trainX.shape[1])
trainY.reshape(len(trainX), )
和同样的错误:
trainX.reshape(1, len(trainX), trainX.shape[1])
trainY.reshape(len(trainX), 1)
目前,trainX被重塑为:
trainX.reshape(trainX.shape[0], 1, trainX.shape[1])
array([[[ 4.49027601e+00, -3.71848297e-01, -3.71848297e-01, ...,
1.06175239e+17, 1.24734085e+06, 5.16668131e+00]],
[[ 2.05921386e+00, -3.71848297e-01, -3.71848297e-01, ...,
8.44426594e+17, 1.39098642e+06, 4.01803817e+00]],
[[ 9.25515792e+00, -3.71848297e-01, -3.71848297e-01, ...,
4.08800518e+17, 1.24441013e+06, 3.69129399e+00]],
...,
[[ 3.80037999e+00, -3.71848297e-01, -3.71848297e-01, ...,
1.35414902e+18, 1.23823291e+06, 3.54601899e+00]],
[[ 3.73994822e+00, -3.71848297e-01, 8.40698741e+00, ...,
3.93863169e+17, 1.25693299e+06, 3.29993440e+00]],
[[ 3.56843035e+00, -3.71848297e-01, 1.53710656e+00, ...,
3.28306336e+17, 1.22667253e+06, 3.36569960e+00]]])
trainY改编为:
trainY.reshape(trainY.shape[0], )
array([[-0.7238661 ],
[-0.43128777],
[-0.31542821],
[-0.35185375],
...,
[-0.28319519],
[-0.28740503],
[-0.24209411],
[-0.3202021 ]])
和testX重塑为:
testX.reshape(1, testX.shape[0], testX.shape[1])
array([[[ -3.71848297e-01, -3.71848297e-01, -3.71848297e-01, ...,
-3.71848297e-01, 2.73982042e+06, -3.71848297e-01],
[ -3.71848297e-01, -3.71848297e-01, -3.71848297e-01, ...,
-3.71848297e-01, 2.73982042e+06, -3.71848297e-01],
[ -3.71848297e-01, -3.71848297e-01, -3.71848297e-01, ...,
2.00988794e+18, 1.05992636e+06, 2.49920150e+01],
...,
[ -3.71848297e-01, -3.71848297e-01, -3.71848297e-01, ...,
-3.71848297e-01, -3.71848297e-01, -3.71848297e-01],
[ -3.71848297e-01, -3.71848297e-01, -3.71848297e-01, ...,
-3.71848297e-01, -3.71848297e-01, -3.71848297e-01],
[ -3.71848297e-01, -3.71848297e-01, -3.71848297e-01, ...,
-3.71848297e-01, -3.71848297e-01, -3.71848297e-01]]])
,错误是:
ValueError:检查时出错:预期lstm_25_input具有形状(无,1,72)但是具有形状的数组(1,2895067,72)
编辑1:
以下是我的模特代码:
trainX = trainX.reshape(trainX.shape[0], 1, trainX.shape[1])
trainY = trainY.reshape(trainY.shape[0], )
testX = testX.reshape(1, testX.shape[0], testX.shape[1])
model = Sequential()
model.add(LSTM(100, return_sequences=True, input_shape = trainX.shape[0], trainX.shape[2])))
model.add(LSTM(100))
model.add(Dense(1, activation='linear'))
model.compile(loss='mse', optimizer='adam')
model.fit(trainX, trainY, epochs=500, shuffle=False, verbose=1)
model.save('model_lstm.h5')
model = load_model('model_lstm.h5')
prediction = model.predict(testX, verbose=0)
ValueError Traceback(最近一次调用 最后)in() 43 model.compile(loss =' mse',optimizer =' adam') 44 ---> 45 model.fit(exog,endog,epochs = 50,shuffle = False,verbose = 1) 46 47 start_date = endog_end + timedelta(days = 1)
D:\ AnacondaIDE \ lib \ site-packages \ keras \ models.py in fit(self,x,y, batch_size,epochs,verbose,callbacks,validation_split, validation_data,shuffle,class_weight,sample_weight,initial_epoch, ** kwargs) 865 class_weight = class_weight, 866 sample_weight = sample_weight, - > 867 initial_epoch = initial_epoch) 868 869 def evaluate(self,x,y,batch_size = 32,verbose = 1,
D:\ AnacondaIDE \ lib \ site-packages \ keras \ engine \ training.py in fit(self, x,y,batch_size,epochs,verbose,callbacks,validation_split, validation_data,shuffle,class_weight,sample_weight,initial_epoch, steps_per_epoch,validation_steps,** kwargs)1520
class_weight = class_weight,1521 check_batch_axis = False, - > 1522 batch_size = batch_size)1523#准备验证数据。 1524 do_validation = FalseD:\ AnacondaIDE \ lib \ site-packages \ keras \ engine \ training.py in _standardize_user_data(self,x,y,sample_weight,class_weight,check_batch_axis,batch_size)1376
self._feed_input_shapes,1377
check_batch_axis =假 - > 1378 exception_prefix ='输入')1379 y = _standardize_input_data(y,self._feed_output_names,
1380 output_shapes,D:\ AnacondaIDE \ lib \ site-packages \ keras \ engine \ training.py in _standardize_input_data(数据,名称,形状,check_batch_axis,exception_prefix) 142'有形状' + str(shapes [i])+ 143'但得到了阵型' + - > 144 str(array.shape)) 145个返回数组 146
ValueError:检查输入时出错:预期lstm_31_input有 形状(无,250,72),但有阵列形状(21351,1,72)
编辑2:
从@Paddy尝试更新后的解决方案后,我在调用predict()时遇到了这个错误:
ValueError Traceback(最近一次调用 最后)in() 1个模型= load_model(' model_lstm.h5') 2 ----> 3预测= model.predict(exog_test,verbose = 0) 4#表示范围内的x(0,len(exog_test)):
D:\ AnacondaIDE \ lib \ site-packages \ keras \ models.py in predict(self,x, batch_size,详细) 911如果不是self.built: 912 self.build() - > 913返回self.model.predict(x,batch_size = batch_size,verbose = verbose) 914 915 def predict_on_batch(self,x):
D:\ AnacondaIDE \ lib \ site-packages \ keras \ engine \ training.py in 预测(self,x,batch_size,verbose,steps)1693 x = _standardize_input_data(x,self._feed_input_names,1694 self._feed_input_shapes, - > 1695 check_batch_axis = False)1696如果self.stateful:1697如果x [0] .shape [0]> batch_size和x [0] .shape [0]%batch_size!= 0:
D:\ AnacondaIDE \ lib \ site-packages \ keras \ engine \ training.py in _standardize_input_data(数据,名称,形状,check_batch_axis,exception_prefix) 130'拥有' + str(len(shapes [i]))+ 131'尺寸,但有形状阵列' + - > 132 str(array.shape)) 133中的j,(dim,ref_dim)枚举(zip(array.shape,shapes [i])): 134如果不是j而不是check_batch_axis:
ValueError:检查时出错:预期lstm_64_input为3 尺寸,但有形状的阵列(2895067,72)
答案 0 :(得分:1)
尝试重塑:
cellItems
但是,一般来说,您有两种方法,可以重塑输入数据或更改模型参数。
请查看错误消息,它在这里说明了一切!
好的,这是您的代码的更新:
trainX.reshape(len(trainX),1, trainX.shape[1])
trainY.reshape(len(trainX), 1)
答案 1 :(得分:1)
你有:
trainX = trainX.reshape(trainX.shape[0], 1, trainX.shape[1])
trainY = trainY.reshape(trainY.shape[0], )
testX = testX.reshape(1, testX.shape[0], testX.shape[1])
你想:
trainX = trainX.reshape(trainX.shape[0], 1, trainX.shape[1])
trainY = trainY.reshape(trainY.shape[0], )
testX = testX.reshape(testX.shape[0],1, testX.shape[1])
您在testX中混合了样本和时间步长维度