输入数组有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输入数组,而我不知道如何重塑我正确描述的数组。
答案 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/
如果您需要更直接的答案,请告诉我。