簡體   English   中英

使用神經網絡的文本分類

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM