如何为LSTM准备阵列?

时间:2018-10-24 05:29:39

标签: python tensorflow keras lstm

输入数组有4列:前3个是介于-1和1之间的实数,第4个是所需的输出,可以是-1或0或+1(这是分类问题,-1和1代表有用的类别,0表示样本不属于任何类别)。显然,将网络类型选择为LSTM,因为类别不仅取决于前3列的值,而且取决于先前样本的属性。

我会做一个简单的非LSTM网络(但是我不确定这是正确的,因为我是Keras的新手,并且使用Python进行神经网络工作,在此之前,我只在Java和C#中使用过Encog而且没有LSTM)

# dataset = the array I've described above
x = dataset[:, 0:3]
y = dataset[:, 3]
model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(x, y, epochs=epochs, batch_size=10)

但是使用LSTM会引发ValueError,因为LSTM需要3D输入数组,而我不知道如何重塑我正确描述的数组。

1 个答案:

答案 0 :(得分:0)

如果您正在使用Keras并可以访问GPU,我建议您使用CuDNNLSTM而不是常规LSTM来进行更快的培训。回到您的问题。

LSTM需要3D输入,因此这是一个快速入门的示例。假设您有以下两列表格数据:

series 1: 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0
series 2: 1.0, 0.9, 0.8, 0.7, 0.6, 0.5, 0.4, 0.3, 0.2, 0.1

因此数据显示如下(10、2):

from numpy import array
data = array([
    [0.1, 1.0],
    [0.2, 0.9],
    [0.3, 0.8],
    [0.4, 0.7],
    [0.5, 0.6],
    [0.6, 0.5],
    [0.7, 0.4],
    [0.8, 0.3],
    [0.9, 0.2],
    [1.0, 0.1]])

为了将其重塑为3D输入,您需要执行以下操作:

data = data.reshape(1, 10, 2)

将数据重塑为1个样本,其中包括10个时间步长和2个功能。

来源: https://machinelearningmastery.com/reshape-input-data-long-short-term-memory-networks-keras/

如果您需要更直接的答案,请告诉我。