pytorch自然語言處理之Pooling層的句子分類
05-08
來自微信公眾號 深度學習自然語言處理
Pooling作為最簡單的層其實也可以作為句子分類任務。Pooling有很多種,max_Pooling,avg_Pooling,min_Pooling等。常用的還是max_Pooling:取同維度的最大值。
先看看流程圖:
這裡的Linear Layer後面應該經過一個Softmax的,可是由於交叉熵cross_entropy里隱含有Softmax,這裡我就沒有畫了。
第一步搭建網路
這裡除了劃線的和類的名字外,其他都是pytorch固定模板。__init__就是搭建網路的函數,forward是數據怎麼在你剛搭建的網路中流動的寫出來就行,注意數據矩陣的維數,要前後對上。該維度可以用view(),t(),transport()按照想法進行改變。我在這個維度上浪費了很長時間,就是對不上。慢慢理解了,就會了。
這裡的Embeding層就是把現實客觀特徵轉成電腦識別的特徵,也就是特徵向量化。
第二步讀入數據並將數據數字化
數據是這個樣子:
前面文本後面類別
讀取文本的類
清洗英文文本的函數,這個寫過一次後,下次清洗文本直接複製直接用。
文本讀取完後,建立詞典,為只有數字序列化做準備。函數如下:
字典為:
然後通過函數調用就能生成數字序列:
第三步開始訓練
因為用SGD很多時候不能夠收斂。。。特別悲催。所以推薦用Adam優化。
這是計算精確度的函數,在一遍跑好的模型上走一遍Dev數據,得出開發集準確率。torch和numpy交換就用 .numpy()。
最後得出結果:
這個賊耗時間
精確度慢慢增長。。。(慢是因為沒有寫batch)
在此,非常感謝劉宗林師兄的技術支持。
推薦閱讀:
TAG:機器學習 | 深度學習DeepLearning | 自然語言處理 |