RNN的输入数据格式

时间:2017-05-03 02:32:47

标签: machine-learning keras lstm recurrent-neural-network

我很困惑如何将数据序列编码为LSTM RNN的输入。

在vanilla DNN中,每个标签都有一个输入。什么是"输入"在RNN?它是否必须是一组(或序列)数据,以便训练与标签相关的顺序事件?

我很困惑如何对顺序信息进行编码,因为似乎应该有多个输入与给定标签相关联。

3 个答案:

答案 0 :(得分:3)

让我们在代码中绘制一个例子。

假设我们有一些句子,句子中的每个单词都被编码为一个向量(也许来自word2vec的向量)。

假设我们想要将每个句子分类为两个类(0,1)中的一个。我们可以像这样构建一个简单的分类器:

import numpy as np
from keras.models import Sequential
from keras.layers import LSTM, Dense

# each example (of which we have a 100) is a sequence of 10 words and
# each words is encoded as 16 element vectors

X = np.random.rand(100, 10, 16) 
y = np.random.choice(1, 100)

model = Sequential()
model.add(LSTM(128, input_shape=(10, 16))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='sgd')

# fit model
model.fit(X, y, epochs=3, batch=16)

答案 1 :(得分:1)

  

似乎应该有多个与给定标签相关联的输入

是的,你是对的。实际上你的输入需要是一个3D矩阵。例如,如果您有n个序列,则每个序列的长度为m,并且每个序列数据都具有d个特征,您的RNN的输入必须是维度(n,m,d)。

答案 2 :(得分:0)

例如,如果你有一个时间序列(X1,..,Xt),并且想要训练预测器以预测+1的地平线并使用长度为3的序列,那么你的输入和输出将是:

[[X1,X2,X3]]    [X4]
[[X2,X3,X4]]    [X5]
...
[[Xt-3,Xt-2,Xt-1]] [Xt]

因此,有t-3序列,每个序列长度为3,具有1个特征。尺寸应为(t-3,3,1)。