【问题标题】:How to process input and output shape for keras LSTM如何处理 keras LSTM 的输入和输出形状
【发布时间】:2016-10-11 02:39:27
【问题描述】:

我正在学习 RNN,并使用 sklearn 生成的示例数据集在 keras (theano) 中编写了这个简单的 LSTM 模型。

from sklearn.datasets import make_regression
from keras.models import Sequential
from keras.layers import Dense,Activation,LSTM

#creating sample dataset
X,Y=make_regression(100,9,9,2)
X.shape
Y.shape

#creating LSTM model
model = Sequential()
model.add(LSTM(32, input_dim=9))
model.add(Dense(2))
model.compile(loss='mean_squared_error', optimizer='adam')

#model fitting
model.fit(X, Y, nb_epoch=1, batch_size=32)

样本数据集包含 9 个特征和 2 个目标。当我尝试使用这些功能和目标来拟合我的模型时,它给了我这个错误

Exception: Error when checking model input: expected lstm_input_9 to have 3 dimensions, but got array with shape (100, 9)

【问题讨论】:

  • 如果有人感兴趣,我可以通过像这样X=X.reshape(X.shape[0],1,X.shape[1]) 重塑我的X 值来解决问题

标签: python theano keras


【解决方案1】:

如果我是正确的,那么 LSTM 需要 3D 输入。

X = np.random.random((100, 10, 64))
y = np.random.random((100, 2))

model = Sequential()
model.add(LSTM(32, input_shape=(10, 64)))
model.add(Dense(2)) 
model.compile(loss='mean_squared_error', optimizer='adam')

model.fit(X, Y, nb_epoch=1, batch_size=32)

UPDATE:如果你想把X, Y = make_regression(100, 9, 9, 2)转换成3D,那么你可以用这个。

from sklearn.datasets import make_regression
from keras.models import Sequential
from keras.layers import Dense,Activation,LSTM

#creating sample dataset
X, Y = make_regression(100, 9, 9, 2)
X = X.reshape(X.shape + (1,))

#creating LSTM model
model = Sequential()
model.add(LSTM(32, input_shape=(9, 1)))
model.add(Dense(2))
model.compile(loss='mean_squared_error', optimizer='adam')

model.fit(X, Y, nb_epoch=1, batch_size=32)

【讨论】:

  • 有什么办法可以将这个X,Y=make_regression(100,9,9,2) 转换成3D 输入
  • 这行X = X.reshape(X.shape + (1,)) 是做什么的?甚至在该模型也不合适并显示一些错误之后?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-30
  • 2018-02-27
  • 2019-01-20
  • 1970-01-01
相关资源
最近更新 更多