【发布时间】:2020-04-24 14:24:00
【问题描述】:
我不确定如何将数据提供给 LSTM,我有 6 列关系。我使用的是为一个输入设计的模型,并试图改变尺寸。首先我添加了
nsamples, nx, ny = X_train.shape
X_train = X_train.reshape((nsamples,nx*ny))
为了确保MixMaxScaler 获取二维数据。该模型为 LSTM 使用了三个维度(最后一个是 1),因此我将其重新整形为 6 并将其提供给模型。但它会抛出一个错误:
Error when checking target: expected dense to have 2 dimensions, but got array with shape (69692, 42, 6)
所以我添加了flatten 层。它没有帮助......我做错了什么?
顺便提一句。 7 表示 7 天预测。
我的数据看起来像这样
这是代码
data_test = (data.loc['2014-01-01':,:])
data_train = data.loc[:'2013-12-31', :]
data_train = np.array(data_train)
X_train, y_train = [], []
for i in range(7, len(data_train)-7):
X_train.append(data_train[i-7:i])
y_train.append(data_train[i:i+7])
X_train, y_train = np.array(X_train), np.array(y_train)
nsamples, nx, ny = X_train.shape
X_train = X_train.reshape((nsamples,nx*ny))
nsamples, nx, ny = y_train.shape
y_train = y_train.reshape((nsamples,nx*ny))
x_scaler = MinMaxScaler()
X_train = x_scaler.fit_transform(X_train)
y_scaler = MinMaxScaler()
y_train = y_scaler.fit_transform(y_train)
print(X_train, y_train)
# >>>69692, 42 / 69692, 42
X_train = X_train.reshape(69692, 7, 6)
y_train = y_train.reshape(69692, 7, 6)
reg = Sequential()
reg.add(LSTM(units = 200, activation = 'relu', input_shape=(7,6)))
reg.Flatten()
reg.add(Dense(7))
reg.compile(loss='mse', optimizer='adam')
reg.fit(X_train, y_train, epochs = 100)
X_test, y_test = [], []
data_test = np.array(data_test)
for i in range(7, len(data_test)-7):
X_test.append(data_test[i-7:i])
y_test.append(data_test[i:i+7])
X_test, y_test = np.array(X_test), np.array(y_test)
nsamples, nx, ny = X_test.shape
X_test = X_test.reshape((nsamples,nx*ny))
nsamples, nx, ny = y_test.shape
y_test = y_test.reshape((nsamples,nx*ny))
X_test = x_scaler.transform(X_test)
y_test = y_scaler.transform(y_test)
print(X_test.shape, y_test.shape)
# >>> 12189, 42 / 12189, 42
X_test = X_test.reshape(12189,7,6)
y_pred = reg.predict(X_test)
【问题讨论】:
-
你能试试 reg.add(LSTM(200, input_dim=1)) 之类的方法并移除 Flatten 层吗?
-
感谢您的回复;它抛出
TypeError: ('Keyword argument not understood:', 'input_dim') -
对错误的建议深表歉意。我正在查看一些 github 实现,因此建议您使用这个参数。看起来这个参数现在在 LSTM 层中不可用。
-
试试
input_shape而不是input_dim -
input_shape=(1)?抛出:TypeError:'int' 对象不可迭代
标签: python numpy tensorflow keras lstm