![](/img/trans.png)
[英]text classification using neural network in keras - model is weak
[英]Text Classification Using Neural Network
我是機器學習和神經網絡的新手。 我正在嘗試從頭開始使用神經網絡進行文本分類。 在我的數據集中,有7500個文檔,每個文檔都標有七個類別之一。 大約有5800個獨特的單詞。 我正在使用具有4000個神經元的隱藏層。 使用乙狀結腸激活功能。 學習率= 0.1,無輟學。
訓練期間大約2到3個時期后,將顯示警告:
RuntimeWarning:exp中遇到溢出,結果輸出列表顯示為:
[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
0.00000000e+00 0.00000000e+00 4.11701866e-10] for every input except 4.11701866e-10.
乙狀結腸功能:
def sigmoid(x):
output = 1/(1+np.exp(-x))
return output
def sigmoid_output_to_derivative(output):
return output*(1-output)
如何解決此問題?我可以使用其他激活功能嗎?
這是我的完整代碼: https : //gist.github.com/coding37/a5705142fe1943b93a8cef4988b3ba5f
給出准確的答案並不容易,因為問題可能是多方面的,並且很難重構,但我將嘗試一下:
因此,似乎您正在經歷下溢,這意味着神經元的權重將輸入向量x縮放為將導致S形函數為零的值。 一個幼稚的建議是將精度從float32提高到float64,但是我想您已經達到了這個精度。
您是否曾嘗試過學習率和/或嘗試過自適應學習率? (有關某些示例,請參見https://towardsdatascience.com/learning-rate-schedules-and-adaptive-learning-rate-methods-for-deep-learning-2c8f433990d1 )。 可以嘗試以較低的學習率進行更多迭代。
另外:您是否在輸出層中使用Sigmoid函數? 增加的非線性會驅動您的神經元飽和,即您的問題。
您檢查過漸變嗎? 有時,這有時還有助於跟蹤錯誤( http://ufldl.stanford.edu/wiki/index.php/Gradient_checking_and_advanced_optimization )。
另外,您可以嘗試使用其他激活功能(例如,線性啟動)來提高自己的訓練水平。
由於機器學習的概率往往很小,並且對其進行的計算會導致更小的值(導致下溢錯誤),因此,最好使用對數值進行計算 。
使用float64類型也不錯,但最終也會失敗。
因此,與其將兩個小概率相乘,不如將其對數值相加。 其他操作(例如exp())也是如此。
我知道的每個機器學習框架默認都會返回對數模型參數,或者有一個方法。 或者,您僅使用內置的數學函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.