实验结果:(已过 strong baseline)
可视化实验记录:(稳定在0.75升不上去了,50个epoch可以收敛了)
修改记录:
数据方面:
- 调整验证集比例为0.01,不需要那么多:
VAL_RATIO = 0.01
BATCH_SIZE = 2048
,用到bn
,BATCH_SIZE
必须大才有效果
网络方面:
3. dim 直接到2048,不然val_acc不会动,直接抄的参考资料1
4. DNN
非常容易过拟合,dropout也用上:nn.Dropout(0.5),
5. BN
加快收敛(BN和dropout一起用可以吗?(可以吧,bn相当于每一层做归一化,效果还不错)(等待求解中·…)):nn.BatchNorm1d(2048), # bn在激活函数之后,限制 值范围
6. L2正则化:optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate, weight_decay=l2), l2 = 1e-4
(不太理解weight_decay
就是L2正则化,等待学习中…李沐老师视频-12 权重衰退【动手学深度学习v2】)
改进想法:
- 对数据分析发现是个不平衡数据集,对不平衡数据集的处理?重采样?weight_sample?
- AM-Softmax?(从后面视频听来的) (用了之后没什么效果啊,可能用错了?)参考链接
- 后处理再细致些?参考【ML2021李宏毅机器学习】作业2 TIMIT phoneme classification 思路讲解
做完这个实验应该有的收获:
-
这个实验还是关于DNN的,DNN非常容易过拟合,所以解决过拟合的手段都可以用上看看:
dropout,BN,正则化
-
dim直接开到2048才能看到效果… 早期的调参记录无任何经验瞎分析,dim <= 1024 无任何提升始终停留0.7
-
在
Dataloader
中别忘记开num_workers=8, pin_memory=True
,快:val_loader = DataLoader(val_set, batch_size=BATCH_SIZE, shuffle=False, num_workers=8, pin_memory=True) # 记得一定要num_workers=8, pin_memory=True
-
自己看的新的损失函数AM-Softmax没什么效果… 【待求解中…】
-
单个模型最高的分数升不到0.76,这里直接照抄参考资料1,自己在做的时候只做了model1和model2的ensemble,就能升到0.76了,再加上后处理刚刚好过strong baseline(111,前后相同,中间改为前或后,这里应该是根据声音是连续的领域知识,更细的后处理如维比特算法?)
-
看来模型ensemble是个大杀器!
如何做 ensemble?
开多几个页面(复制粘贴的事,这样就能多个模型一起训练,当然看gpu内存够不够),修改不同的架构,超参数,训练轮次…,
- 参考资料1直接用所有数据进行训练,也行?(先训练特征提取器,后微调,在很多文章的做法)
参考资料:
-
https://github.com/pai4451/ML2021/blob/main/hw2/model%201.ipynb
-
https://github.com/1am9trash/Hung_Yi_Lee_ML_2021/blob/main/hw/hw2/hw2_code.ipynb