2017-09-04 197 views
0

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

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

我想要预测的是如果Xt + 1将会比Xt更高或更低。如果Xt + 1大于Xt,则Xt的Y值为1。我的训练X值的形状(932,100,1)为932个样本,100为“回顾”序列,1为特征。我得到的预测如下:

Predictions 
.512 
.514 
.513 

我在想这些可能是概率,因为我的模型精度是51%左右。任何想法如何让他们成为二进制?完整型号代码如下:

# Defining network architecture 
def build_model(layers): 
    model = Sequential() 

    model.add(LSTM(
     input_dim=layers[0], 
     output_dim=layers[1], 
     return_sequences=True)) 
    model.add(Dropout(0.2)) 

    model.add(LSTM(
     layers[2], 
     return_sequences=False)) 
    model.add(Dropout(0.2)) 

    model.add(Dense(
     output_dim=layers[3])) 
    model.add(Activation("sigmoid")) 

    start = time.time() 
    model.compile(loss="binary_crossentropy", optimizer="rmsprop",metrics=['accuracy'],class_mode="binary") 
    print("> Compilation Time : ", time.time() - start) 
    return model 

# Compiling model 
model = build_model([1, 100, 500, 1]) 

回答

2

这是正常行为。

神经网络中没有“二元”,但是在一定范围内是连续的函数。

只有连续函数模型可以使用“随机梯度下降”进行训练和学习。

对于尝试实现二元结果,我们使用sigmoid函数,它从0到1.但是最初,您的模型没有被训练,它的所有“权重”都是随机初始化的。结果的确是趋于平均值的结果,在S形函数中是0.5。

所有你需要的是培养具有足够时代足够的数据模型,这样的成绩会逐渐接近(但从来没有命中)0或1(或任何目标的“Y”你在你的训练数据)

+0

我不知道它是这样工作的。谢谢你的解释! – user3910919