【问题标题】:2-dimensional LSTM in KerasKeras 中的二维 LSTM
【发布时间】:2017-06-08 21:26:54
【问题描述】:

我是 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)

这很简单,而且收敛很快。

但是,如果我的数据不是由整数列表组成,而是由二维元组组成,我就不能再创建分类(one-hot)数组来传递给 LSTM 层。

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

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

但这并没有收敛,或者至少移动得非常慢。

如何调整此代码以处理具有附加维度的输入?

【问题讨论】:

  • 我不确定你是同时改变了几个因素还是有必要改变另一个因素。你能告诉我:1.你为什么使用分类数据而不是二维数组来进行网格位置序列? 2.为什么元组需要这条线? model.add(Dense(1, activation="linear"))

标签: keras lstm


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2018-02-10
    • 1970-01-01
    • 2017-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 2023-03-05
    相关资源
    最近更新 更多