【问题标题】:More input to LSTMLSTM 的更多输入
【发布时间】: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


【解决方案1】:

您的代码将其设为 Flatten: reg.Flatten()

试试这个: reg.add(Flatten())

编辑:

我已经尝试了与您的下面类似的代码,并且它有效。我不确定为什么您的 Y 形状为 (7,6)。尝试了解我的代码在概念上与您的代码有何不同(尤其是您的目标输出 Y)。

X_train = np.array([[6.8, 36.3,140.1,31,3.2,4],[7.6, 40.5, 141.4,0,4.6,5]])
X_train = X_train.reshape(2,3,2)
Y_train = np.array([[1],[3]])

reg = Sequential()
reg.add(LSTM(units = 200, activation = 'relu', input_shape=                        
(X_train.shape[1], X_train.shape[2]), return_sequences=True))
reg.add(Flatten())
reg.add(Dense(1))
reg.compile(loss='mse', optimizer='adam')
#reg.summary()
reg.fit(X_train, Y_train, epochs = 100)

【讨论】:

  • 感谢您的评论。我添加了reg.add(Flatten()) 抛出:ValueError: Error when checking target: expected dense to have 2 dimensions, but got array with shape (69692, 7, 6)
  • 但是当我注释掉 Dense 时,它会抛出 Error when checking target: expected flatten to have 2 dimensions, but got array with shape (69692, 7, 6)
  • 感谢代码!它有效,但我想问一件事。我在那里使用循环来制作 7 天(天)的数据,所以我在 7 天的基础上预测第 8 天。但是当我shape 你的代码时,它会显示(n 行,6 列)。我用的不是那个7天的块,就不能这样用吗?我正在使用这个基础github.com/laxmimerit/…
猜你喜欢
  • 2018-09-14
  • 2017-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-09
  • 1970-01-01
  • 2018-03-25
  • 1970-01-01
相关资源
最近更新 更多