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