首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >标签数据的Keras无效参数

标签数据的Keras无效参数
EN

Stack Overflow用户
提问于 2020-01-01 23:24:24
回答 1查看 36关注 0票数 0

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

代码语言:javascript
复制
Invalid argument: Specified a list with shape [1239,1] from a tensor with shape [310,1]

下面是代码的一部分:

代码语言:javascript
复制
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个数据点。

是否有人在此之前遇到过此错误,或曾否告知问题可能是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-01 23:53:09

问题可能是您指定了batch_input_shape,这会导致模型在通过只有310个条目的测试集时发出抱怨。只要换一条线,

代码语言:javascript
复制
model.add(LSTM(units=1239, activation='relu', batch_input_shape=(1239, 600, 1),
              stateful=False, return_sequences=False))

代码语言:javascript
复制
model.add(LSTM(units=1239, activation='relu', input_shape=(600, 1),
              stateful=False, return_sequences=False))

这样就可以消除错误。但我对你的做法有些怀疑。例如,您正在使用LSTM的输出作为分类层。这是非常不正统的。你应该考虑在上面使用密集的一层。

其他几件事。你的模型在计算上很饥渴。

  • 您正在使用1239的批处理大小来拟合模型,这就是训练大小的大小。相反,您应该尝试一个较小的批处理大小。
  • 您的LSTM有1239个单元。即使是我在生产中看到的最复杂的模型,也只使用了几百个单元。因此,正如我前面所解释的,应该考虑使用具有1239个输出的密集层(如果这是类的数量),并减少LSTM.

的大小。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59556902

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档