李宏毅机器学习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类别)

数据集介绍:
李宏毅机器学习2022-hw2_第1张图片
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代码明显欠拟合,说明模型有些简单了,所以调整网络架构,稍微变宽和变深。
李宏毅机器学习2022-hw2_第2张图片
为了迎合更复杂的模型,学习率也稍微调整的大些(如果调大batch_size学习率也是要对应调大,具体原因见李宏毅老师视频第二节)。
本地运行结果:最后的acc为0.703,感觉再多训练几轮应该还能更好,但已经过medium baseline了就先这样吧
李宏毅机器学习2022-hw2_第3张图片

下面是提交后的结果(在测试集上甚至比训练集高了一丝丝)
李宏毅机器学习2022-hw2_第4张图片
下面这个是我在middle baseline上几乎是极限的操作了
这个训练多了会明显过拟合(train acc提高但val acc下降),只训练了3轮,看之后加点dropout和BN会有啥结果
李宏毅机器学习2022-hw2_第5张图片
提交结果:
李宏毅机器学习2022-hw2_第6张图片

Strong Baseline (acc>0.75028)

ppt:concat n frames,batchnorm,dropout,add layers
medium baseline 单纯的加了batchnorm和dropout,效果明显变好,能训练到10次了,而且感觉acc还能继续提高一些
李宏毅机器学习2022-hw2_第7张图片
为了变得更好,继续加入余弦退火学习率
好了一些,但距离strong baseline还有一段距离
李宏毅机器学习2022-hw2_第8张图片
调整batch size=2048,train集:val=0.9.最后acc=0.747,又变好了一些但还没到strong baseline。感觉是有点过拟合,因为训练集acc上升但val不变了(或者是模型复杂?)。反正之后打算再加一点dropout
李宏毅机器学习2022-hw2_第9张图片
提交结果差一丝丝
李宏毅机器学习2022-hw2_第10张图片
dopout(0.35)终于过双strong baseline了,好耶!
跑了一个小时,最后终于艰难的被困在critical point挣扎不出去呜呜,本地acc最后为0.756
李宏毅机器学习2022-hw2_第11张图片
提交终于过了嘿嘿
李宏毅机器学习2022-hw2_第12张图片
事已至此!总结一下strong baseline的参数:
(1)超参数:
李宏毅机器学习2022-hw2_第13张图片
(2)网络:
李宏毅机器学习2022-hw2_第14张图片
(3)余弦退火学习率:
其实这个我真不太会用,参数都没调,就设置了个大概常规值吧(主要是跑的太慢了实在要命)

scheduler = torch.optim.lr_scheduler.CosineAnnealingWarmRestarts(optimizer, T_0=8, T_mult=2, eta_min=learning_rate/2)

Boss Baseline (acc>0.82324)

ppt:sequence-labeling(using RNN)
这个等之后看到RNN再来完善

Report Questions

李宏毅机器学习2022-hw2_第15张图片
Q1
A:按照hidden_layers=6,hidden_dim=1024修改网络(窄、深)
acc:0.696,没有B方案好
李宏毅机器学习2022-hw2_第16张图片

B:按照hidden_layers=2,hidden_dim=1700修改网络(宽,浅)
acc:0.706。但看这个数据分析应该是有点过拟合了,下一波加dropout和BN试试
李宏毅机器学习2022-hw2_第17张图片
提交结果蛮好的:
李宏毅机器学习2022-hw2_第18张图片

总结:在simple baseline的基础上,只加了concat_nframes = 17做的,最后平衡了网络的宽窄深度,得到middle baseline。
Q2
A:dropout(0.25),具体见middle中间那次实验
李宏毅机器学习2022-hw2_第19张图片
B:dropout(0.5)
到acc=0.749的时候gpu资源用完了,但估计肯定没有0.35好,至于中间还有没有更好的,不好说,但估计不会有很大的本质上变化。倒是比0.25好了一点点哈哈
李宏毅机器学习2022-hw2_第20张图片

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。(观点来自吴恩达机器学习)

你可能感兴趣的:(李宏毅机器学习hw,机器学习,深度学习,人工智能)