将可变长度输入提供给LSTM

时间:2018-11-04 15:22:19

标签: machine-learning deep-learning lstm rnn

我的输入数据由列表列表组成。这两个列表的每个示例都有动态长度,如下所示。

X[0] = [[0, 1, 3, 5, 8, 26], [3, 4, 5, 7, 9, 15, 26, 30, 38, 39, 40]]
X[1] = [[1, 2, 4, 16, 19, 29, 48]]
..

我的目标数据由如下所示的动态长度列表组成:(每个目标daha只有一个列表,没有LIST OF LIST,但是列表的长度可以不同)

y[0] = [5, 7, 8, 12, 15, 17, 29]
y[1] = [2, 4, 6, 8, 10, 11, 16, 18, 19, 29, 30, 33, 35]
..

我尝试用给定的输入X训练LSTM模型,预测Y

如果我将每个X列表合并为一个列表并进行填充操作,则LSTM会接受该数据类型。我的示例代码如下:

X_train = sequence.pad_sequences(X_train, maxlen=padding_size)
X_test = sequence.pad_sequences(X_test, maxlen=padding_size)

model = Sequential()
model.add(Embedding(50, 10, input_length=X_train.shape[1], mask_zero=True))

if isBidirectional:
    model.add(Bidirectional(LSTM(lstm_layer_number)))
else:
    model.add(LSTM(lstm_layer_number))

if isDropout:
    model.add(Dropout(0.5))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) # binary crossentropy yields the best results

问题是我不想将输入作为固定大小的向量提供。而不是给定固定大小的向量,我想输入为动态大小并按列表列出。

如何将这些输入作为顺序(按列表列出)提供给LSTM?

感谢您的帮助。

0 个答案:

没有答案