2017-08-11 86 views
1

我有一個香草前饋神經網絡(2隱藏層和softmax輸出層),做文本分類。它是用tflearn實現的。Tflearn排名文件與神經網絡沒有softmax輸出層

softmax所做的是將輸出轉換爲密度概率分佈,以確定輸入實例最可能的類別。

而不是分類,我想排名文件(每個類將有一個「分數」,而不是一個概率)。所以我的方法不是標準化輸出層,而是僅使用常規圖層(使用S形啓動函數)。這會給我這個分數(在0和1之間)的每個文件。

我定義的模型是這樣的:

tf.reset_default_graph() 
    # Build neural network 
    net = tflearn.input_data(shape=[None, x_size]) 
    net = tflearn.fully_connected(net, self.HIDDEN_LAYER_SIZE) 
    net = tflearn.fully_connected(net, self.HIDDEN_LAYER_SIZE) 
    net = tflearn.fully_connected(net, y_size, activation='sigmoid') 
    net = tflearn.regression(net) 

    # Define model and setup tensorboard 
    model = tflearn.DNN(net) 
    return model 

如果我訓練模型與SOFTMAX輸出,該模型是相當準確的。但是如果我改變一個S形輸出激活函數,我的分數就不如我預期的那麼準確(正確的分數是最高的)。在某些情況下,分數完全錯誤。

我的問題是:這種方法是正確的做文本排名與神經網絡?爲什麼分數不像預期的那樣(也許我在訓練期間缺少一些東西,或者某些超參數需要一些調整,或者我是否需要使用此方法的更多訓練數據?或者是什麼與tflearn?)。

在此先感謝! Ivan

回答

1

你試圖解決的問題是迴歸問題。你希望網絡的結果是一個連續的值(在你的情況下,從0到1),而不是將它映射到不同的類別(這將被稱爲分類)。

作爲一般規則,對迴歸量你想使用線性激活(在tflearn 線性)或RELU(RELU在tflearn取值範圍從0到∞)爲輸出層活化。

您的網絡在輸出層中使用sigmoid激活時性能不佳的原因在於vanishing gradient problem。 當你的輸出接近1時,sigmoid變得非常非常平坦,漸變消失到接近零,使得反向傳播學習速度非常緩慢。

TL; DR:這是正常的。這是由於消失梯度問題。相反,請使用線性或ReLU進行迴歸。