Keras标签数据的无效参数
尝试使用一个LSTM层对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
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))