我是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"))
但这并不会收敛,或者至少会以非常缓慢的速度移动。
如何调整此代码以处理具有其他尺寸的输入?