Binary Keras LSTM模型不输出二进制预测

时间:2017-09-04 15:57:51

标签: python deep-learning keras lstm

我制作了一个Keras LSTM模型,它读取二进制目标值,并且应该输出二进制预测。但是,预测不是二进制的。我的X和Y值的样本如下:

?country=US,UK,Japan

我想要预测的是Xt + 1是高于还是低于Xt。如果Xt + 1大于Xt,则Xt的Y值为1。我的训练X值的形状(932,100,1)为932个样本,100个为"回顾"序列,1为功能。我得到的预测如下:

X      Y
5.06   0
4.09   1
4.72   0
4.57   0
4.44   1
6.98   1 

我认为这些可能是概率,因为我的模型准确率约为51%。关于如何让它们成为二进制的任何想法?完整的型号代码如下:

Predictions
.512
.514
.513

2 个答案:

答案 0 :(得分:3)

这是正常行为。

没有"二进制"在神经网络中,但在一定范围内的连续功能。

只有连续功能,模型才能使用"随机梯度下降"来训练和学习。

为了尝试实现二进制结果,我们使用sigmoid函数,它从0到1。但最初,你的模型没有经过训练,所有的"权重"是随机初始化的。结果确实结果倾向于表示值,在sigmoid函数中为0.5。

您所需要的只是为足够的时期训练您的模型足够的数据,因此结果将逐渐接近(但从未命中)0或1(或任何目标" y"您的训练数据中有)

答案 1 :(得分:0)

我遇到了同样的问题并解决了:

seq_predictions=model.predict(test_sequences)
print('Outputs shape')    
print(seq_predictions.shape) # prints (n,1) but  need (n,)
seq_predictions=np.transpose(seq_predictions)[0]  # transformation to get (n,)
print(seq_predictions.shape)  # now the shape is (n,)
# Applying transformation to get binary values predictions with 0.5 as thresold
seq_predictions = list(map(lambda x: 0 if x<0.5 else 1, seq_predictions))