如何在Keras神经网络中进行简单的数据调用

时间:2018-08-22 17:38:22

标签: python tensorflow keras lstm

我正在尝试一些技巧,并且正在尝试进行基本的时间序列预测。我的输入是一个介于0到10之间的随机整数的列表,例如:[1,3,2,4,7,5,9,0],而我的标签与输入相同,但被延迟了,例如:[X,X,1,3,2,4,7,5],我正在尝试让我的模型学习这一点记住过去数据点的关系。 我的代码是:

labels = keras.utils.to_categorical(output, num_keys)

model = keras.Sequential([
    keras.layers.LSTM(10),
    keras.layers.Dense(10, activation='relu'),
    keras.layers.Dense(10, activation=tf.nn.softmax)
    ])

model.compile(optimizer=tf.train.AdamOptimizer(),
              loss=tf.keras.losses.categorical_crossentropy,
              metrics=['accuracy'])

model.fit(input, labels, epochs=30, verbose=2,shuffle=False)

我得到了错误:ValueError: Please provide as model inputs either a single array or a list of arrays. You passed: x=[7, 6,...

我尝试使用以下命令重新输入内容:

input=numpy.array([[i,input[i]]for i in range(len(input))])
input=numpy.reshape(input,input.shape+(1,))

并将input_shape=input.shape[1:]添加到我的LSTM层中,不会引发任何错误,但是准确度仅比盲目猜测好

这似乎是一件微不足道的事情,但我显然缺少了一些东西。

1 个答案:

答案 0 :(得分:1)

对于keras.layers.LSTM(10),您需要包括输入数据形状:keras.layers.LSTM(10, input_shape = (input.shape[1], input.shape[2]))

Keras期望输入数据的形状为[实例,时间,预测变量],并且由于您没有其他预测变量,因此您可能需要将输入数据重新调整为input.reshape(input.shape[0], input.shape[1], 1)

Keras会推断出下一层的数据形状,但是第一层需要定义输入形状。