我正在尝试一些技巧,并且正在尝试进行基本的时间序列预测。我的输入是一个介于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层中,不会引发任何错误,但是准确度仅比盲目猜测好
这似乎是一件微不足道的事情,但我显然缺少了一些东西。
答案 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会推断出下一层的数据形状,但是第一层需要定义输入形状。