2017-09-04 114 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