如何在LSTM Keras中获得非负输出

3
我正在使用LSTM Keras对时间序列数据进行预测。训练数据中没有负数。
问题在于,当训练误差降低到一定程度时,输出的预测有时会是负数,在我的应用程序中这是没有意义的。
以下是我的循环神经网络(RNN):
model.add(LSTM(100,return_sequences=True,stateful=False,activation='relu', input_shape=(1, look_back)))
model.add(Dropout(0.1))
model.add(Flatten())
model.add(Dense(50, activation='relu'))
model.add(Dense(1, activation='linear', W_constraint=nonneg()))
model.compile(loss='mean_absolute_error', optimizer= 'adam')     
model.fit(trainX, trainY, epochs=100, validation_split = 0.20, batch_size=1, verbose=0)

这主要发生在训练数据中有很多零值的情况下。我该如何避免这种情况。

1个回答

0

你的输出层使用了activation='linear',这意味着你正在使用普通的线性函数作为输出,其值可以从-∞到+∞范围内变化。

enter image description here

如果你只有两个可能的输出,尝试使用一个Sigmoid函数S(x) = 1/(1+e^-x)。这些值仅在0到1之间变化。

Sigmoid Function


1
谢谢回复。但是使用sigmoid激活函数后,我的预测结果不如以前准确,我发现可以使用W_constraint=nonneg()选项,但它并没有起作用。我们是否有类似的东西可以避免得到负输出? - Alok
你在进行某种分类吗?有多少类别? - J.Panek
你好,J.Panek,我正在预测一所学校的入学人数。这个时间序列有70%是'0',只有一些日期有人数,这种情况下是计数(3名学生报名,12名学生报名...)。也许Alok面临类似的情况。 - Guilherme Parreira

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接