尝试用一个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个数据点。
是否有人在此之前遇到过此错误,或曾否告知问题可能是什么?
发布于 2020-01-01 23:53:09
问题可能是您指定了batch_input_shape,这会导致模型在通过只有310个条目的测试集时发出抱怨。只要换一条线,
model.add(LSTM(units=1239, activation='relu', batch_input_shape=(1239, 600, 1),
stateful=False, return_sequences=False))至
model.add(LSTM(units=1239, activation='relu', input_shape=(600, 1),
stateful=False, return_sequences=False))这样就可以消除错误。但我对你的做法有些怀疑。例如,您正在使用LSTM的输出作为分类层。这是非常不正统的。你应该考虑在上面使用密集的一层。
其他几件事。你的模型在计算上很饥渴。
的大小。
https://stackoverflow.com/questions/59556902
复制相似问题