李宏毅机器学习2022-hw2

系列文章目录

李宏毅ML-2021hw1



问题概述

这个问题刚开始读了好久才读懂…记录一下

这是一个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)余弦退火学习率:
其实这个我真不太会用,参数都没调,就设置了个大概常规值吧(主要是跑的太慢了实在要命)

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

在这里插入图片描述
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。(观点来自吴恩达机器学习)

  • 14
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值