ValueError:检查输入时出错:预期lstm_1_input具有形状(973,215),但形状为(61,215)的数组

时间:2019-01-17 18:52:46

标签: python tensorflow keras time-series lstm

在尝试通过更改许多参数来解决跟随问题时,我收到了多个不同的ValueErrors

这是time series problem,我有60个商店,215个项目,1034天的数据。我已经将973天的火车时间和61天的测试时间分开了。:

train_x = train_x.reshape((60, 973, 215))
test_x = test_x.reshape((60, 61, 215))
train_y = train_y.reshape((60, 973, 215))
test_y = test_y.reshape((60, 61, 215))

我的模型

model = Sequential()
model.add(LSTM(100, input_shape=(train_x.shape[1], train_x.shape[2]), 
return_sequences='true'))
model.add(Dense(215))
model.compile(loss='mean_squared_error', optimizer='adam', metrics= 
['accuracy'])
history = model.fit(train_x, train_y, epochs=10,
                validation_data=(test_x, test_y), verbose=2, shuffle=False)
  

ValueError:检查输入时出错:预期lstm_1_input具有   形状(973,215),但数组的形状为(61,215)

1 个答案:

答案 0 :(得分:0)

您已按照时间步长(而不是样本)拆分了数据。您首先需要确定样本是什么。为了回答这个问题,我将假设它们是沿着第一个轴的(假设数据已被构造为有监督的时间序列问题)。

LSTM中的input_size期望here的形状为(timesteps, data_dim),并且每批这些尺寸必须保持相同。在您的示例中,来自训练和测试的样本具有不同的维度。批处理大小可以不同(除非使用batch_size参数指定)。

您的数据应沿第一个轴在训练和测试之间划分。这是Keras教程中的一个类似示例:

from keras.models import Sequential
from keras.layers import LSTM, Dense
import numpy as np

data_dim = 16
timesteps = 8
num_classes = 10

# expected input data shape: (batch_size, timesteps, data_dim)
model = Sequential()
model.add(LSTM(32, return_sequences=True,
               input_shape=(timesteps, data_dim)))  # returns a sequence of vectors of dimension 32
model.add(LSTM(32, return_sequences=True))  # returns a sequence of vectors of dimension 32
model.add(LSTM(32))  # return a single vector of dimension 32
model.add(Dense(10, activation='softmax'))

model.compile(loss='categorical_crossentropy',
              optimizer='rmsprop',
              metrics=['accuracy'])

# Generate dummy training data
x_train = np.random.random((1000, timesteps, data_dim))
y_train = np.random.random((1000, num_classes))

# Generate dummy validation data
x_val = np.random.random((100, timesteps, data_dim))
y_val = np.random.random((100, num_classes))

model.fit(x_train, y_train,
          batch_size=64, epochs=5,
          validation_data=(x_val, y_val))

您会注意到timesteps与训练数据和测试数据x_train.shape[1] == x_val.shape[1]相同。沿第一个轴x_train.shape[0]1000x_val.shape[0]100的样本数。