Keras标签数据的无效参数

Keras标签数据的无效参数,keras,lstm,Keras,Lstm,尝试使用一个LSTM层对keras网络进行时间序列数据分类时,返回以下错误: Invalid argument: Specified a list with shape [1239,1] from a tensor with shape [310,1] 以下是代码的一部分: trainset = trainset.reshape(1239, 600, 1) testset = testset.reshape(310, 600, 1) trainlabels = np.arange(0, le

尝试使用一个LSTM层对keras网络进行时间序列数据分类时,返回以下错误:

Invalid argument: Specified a list with shape [1239,1] from a tensor with shape [310,1]
以下是代码的一部分:

trainset = trainset.reshape(1239, 600, 1)
testset = testset.reshape(310, 600, 1)

trainlabels = np.arange(0, len(trainset_idx), 1).reshape(1239, 1)
testlabels = np.arange(0, len(testset_idx), 1).reshape(310, 1)

model = Sequential()
model.add(LSTM(units=1239, activation='relu', batch_input_shape=(1239, 600, 1),
              stateful=False, return_sequences=False))

model.compile(loss='sparse_categorical_crossentropy', 
              optimizer='adam', metrics=['accuracy'])

print(model.summary())
model.fit(trainset, trainlabels, validation_data=(testset, testlabels), 
          epochs=5, batch_size=1239)

scores = model.evaluate(testset, testlabels, verbose=0)
print("Accuracy: %.2f%%" % (scores[1]*100))
数据基本上是光谱,所有数据点均匀分布,每个样本包含600个数据点


以前是否有人遇到过此错误,或者是否有人可以建议可能出现的问题

问题可能是您指定了
batch\u input\u shape
,当您通过只有310个条目的测试集时,它会导致模型抱怨。只要换线,

model.add(LSTM(units=1239, activation='relu', batch_input_shape=(1239, 600, 1),
              stateful=False, return_sequences=False))

这将消除错误。但我对你的方法有一些严重的怀疑。例如,将LSTM的输出用作分类层。这是很不正统的。你应该考虑在顶部使用一个致密层。

几乎没有其他事情。你的模型非常需要计算

  • 您使用的批量大小为1239以适合模型,这是训练大小的大小。相反,您应该尝试更小的批量
  • 你的LSTM有1239个单位。即使是我在生产中见过的最复杂的模型也要使用几百个单元。因此,正如我上面所解释的,应该考虑使用一个具有1239个输出的稠密层(如果这是类的数量),并减小LSTM的大小。

您能发布完整的堆栈跟踪吗?谢谢,这很有效。关于该模型的低效性,您是对的,我将尝试为最终模型添加密集层和漏层。
model.add(LSTM(units=1239, activation='relu', input_shape=(600, 1),
              stateful=False, return_sequences=False))