Keras的二维LSTM

时间:2017-06-08 21:26:54

标签: keras lstm

我是Keras和LSTM的新手 - 我想在二维序列(即网格空间中的移动)上训练模型,而不是一维序列(如文本字符)。

作为一项测试,我首先尝试了一个维度,并且我正在通过以下设置成功完成:

model = Sequential()
model.add(LSTM(512, return_sequences=True, input_shape=X[0].shape, dropout=0.2, recurrent_dropout=0.2))
model.add(LSTM(512, return_sequences=False, dropout=0.2))
model.add(Dense(len(y[0]), activation="softmax"))
model.compile(loss="categorical_crossentropy", optimizer="rmsprop", metrics=['accuracy'])
model.fit(X, y, epochs=50)

我正在格式化这样的数据:

data = ## list of integers (1D)
inputs = []
outputs = []
for i in range(len(data) - SEQUENCE_LENGTH):
    inputs.append(data[i:i + SEQUENCE_LENGTH])
    outputs.append(data[i + SEQUENCE_LENGTH])
X = np.array([to_categorical(np.array(input), CATEGORY_LENGTH) for input in inputs])
y = to_categorical(np.array(outputs), CATEGORY_LENGTH)

这很简单,收敛很快。

但是如果不是整数列表,我的数据由2D元组组成,我就不能再创建分类(一热)数组来传递给LSTM层。

我尝试过不使用分类数组,只是将元组传递给模型。在这种情况下,我已将输出图层更改为:

model.add(Dense(1, activation="linear"))

但这并不会收敛,或者至少会以非常缓慢的速度移动。

如何调整此代码以处理具有其他尺寸的输入?

1 个答案:

答案 0 :(得分:-1)

previous answer也适用于您的问题。唯一的区别是您必须事先将元组转换为数据框。