李宏毅机器学习2022-hw2
系列文章目錄
李宏毅ML-2021hw1
文章目錄
- 系列文章目錄
- 問題概述
- 實驗部分
- Simple Baseline (acc>0.45797)
- Medium Baseline (acc>0.69747)
- Strong Baseline (acc>0.75028)
- Boss Baseline (acc>0.82324)
- Report Questions
- 總結
- 對于train_ratio的劃分
問題概述
這個問題剛開始讀了好久才讀懂…記錄一下
這是一個41分類的問題。根據一幀前后的其他幀判斷當前幀是屬于哪個phoneme。有關由一段音頻信號切分成幀一幀的數據處理是已經寫好了的,用的是MFCC。
具體來說,就是用之前和之后的k個frame(frame是人為切分一段音頻并經過處理得到的MFCC,即每個frame用39個特征表示,即dim=39。有關frame的個數:total 2k+1 = n frames,這個k是可以根據數據特征指定的。綜上,一個feature為39*n)預測中間的那個frame的label(phoneme類別)
數據集介紹:
test_split指出了哪些是屬于test集合,相當于只是存了一堆標號,真正的數據是在test文件夾里,train同理。其中每一個文件的格式為T×39的tensor。最后構造出來的輸入矩陣X為(len,39×n),n為用前后k個frame預測中間一個frame(n=2k+1),需要把本來的len×39數據構造成len×39×n的。len為數據條數
train_label是給出了整個輸入序列的每一個frame的label,也就是每一個數據的label是長度為T的vector
實驗部分
Simple Baseline (acc>0.45797)
老師ppt提示:sample code
運行源代碼
值得一提的是這次給出的源代碼整體結構比之前的更清晰。
Medium Baseline (acc>0.69747)
ppt:concat n frames,add layers
concat_nframes參數設置+網絡架構改變+學習率設置:
concat_nframes的意義即一個phoneme占用了多少frame
對train_labels.txt文件進行統計,發現每一個phoneme占用的frame均值是9個,因此可以將concat_nframes參數設置為>9(必須為奇數),經嘗試可以將concat_nframes設置的大些,這里我設置為17。
由于之前的simple baseline代碼明顯欠擬合,說明模型有些簡單了,所以調整網絡架構,稍微變寬和變深。
為了迎合更復雜的模型,學習率也稍微調整的大些(如果調大batch_size學習率也是要對應調大,具體原因見李宏毅老師視頻第二節)。
本地運行結果:最后的acc為0.703,感覺再多訓練幾輪應該還能更好,但已經過medium baseline了就先這樣吧
下面是提交后的結果(在測試集上甚至比訓練集高了一絲絲)
下面這個是我在middle baseline上幾乎是極限的操作了
這個訓練多了會明顯過擬合(train acc提高但val acc下降),只訓練了3輪,看之后加點dropout和BN會有啥結果
提交結果:
Strong Baseline (acc>0.75028)
ppt:concat n frames,batchnorm,dropout,add layers
medium baseline 單純的加了batchnorm和dropout,效果明顯變好,能訓練到10次了,而且感覺acc還能繼續提高一些
為了變得更好,繼續加入余弦退火學習率
好了一些,但距離strong baseline還有一段距離
調整batch size=2048,train集:val=0.9.最后acc=0.747,又變好了一些但還沒到strong baseline。感覺是有點過擬合,因為訓練集acc上升但val不變了(或者是模型復雜?)。反正之后打算再加一點dropout
提交結果差一絲絲
dopout(0.35)終于過雙strong baseline了,好耶!
跑了一個小時,最后終于艱難的被困在critical point掙扎不出去嗚嗚,本地acc最后為0.756
提交終于過了嘿嘿
事已至此!總結一下strong baseline的參數:
(1)超參數:
(2)網絡:
(3)余弦退火學習率:
其實這個我真不太會用,參數都沒調,就設置了個大概常規值吧(主要是跑的太慢了實在要命)
Boss Baseline (acc>0.82324)
ppt:sequence-labeling(using RNN)
這個等之后看到RNN再來完善
Report Questions
Q1
A:按照hidden_layers=6,hidden_dim=1024修改網絡(窄、深)
acc:0.696,沒有B方案好
B:按照hidden_layers=2,hidden_dim=1700修改網絡(寬,淺)
acc:0.706。但看這個數據分析應該是有點過擬合了,下一波加dropout和BN試試
提交結果蠻好的:
總結:在simple baseline的基礎上,只加了concat_nframes = 17做的,最后平衡了網絡的寬窄深度,得到middle baseline。
Q2
A:dropout(0.25),具體見middle中間那次實驗
B:dropout(0.5)
到acc=0.749的時候gpu資源用完了,但估計肯定沒有0.35好,至于中間還有沒有更好的,不好說,但估計不會有很大的本質上變化。倒是比0.25好了一點點哈哈
C:跑的實在太慢了不想測試0.75的了應該不會太好吧
總結:
不變量:在middle baseline的基礎上加入dropout層,BN,余弦退火學習率,batch_size = 2048,num_epoch = 50,train_ratio = 0.9。
變量:dropout
思考實驗結果得到strong baseline
總結
和hw1比成長多了嗚嗚。感覺自己對數據處理這里不太會
對于train_ratio的劃分
分出訓練集和測試集的策略:傳統機器學習將整體20%-30%作為測試集,但這適用于總體數據量規模一般的情況(如100-10000個樣本),在大數據時期,分配比例會發生變化,如100萬數據時,訓練:驗證:測試=98:1:1;超過百萬時,訓練:驗證:測試=95:2.5:2.5。(觀點來自吳恩達機器學習)
總結
以上是生活随笔為你收集整理的李宏毅机器学习2022-hw2的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ackerman函数(阿克曼函数) 递归
- 下一篇: 自定义填充图案插件 cad_CAD软件中