Kaggle知识点:深度学习代码规范

每一场Kaggle比赛都一个项目,代码则需要按照规范进行整理。项目规范方便后续的沟通、迭代,非常关键。本文将对竞赛和深度学习通用项目的规范细节进行整理。

步骤1:确定代码框架

首先确定好具体任务,然后根据任务选择合适的框架,如PyTorch Lightning或MMDection。

如果框架有默认目录,则遵守。否则可以创建适合自己的目录,一般而言目录推荐如下:

  • general:常见的训练过程、保存加载模型过程,与具体任务相关的代码。
  • layers:模型定义、损失函数等;
  • experiments:具体任务的训练流程、数据读取和验证过程;
general/
│   train.py
│   task.py
│   mutils.py
layers/
experiments/
│   task1/
│        train.py
│        task.py
│        eval.py
│        dataset.py
│   task2/
│        train.py
│        task.py
│        eval.py
│        dataset.py

步骤2:定义命令行解析

Notebook虽然很好用,但是具体.py代码实际运行和管理更加方便。所以命令行解析就非常关键。

你可以选择自己喜欢的参数解析器,在命令行中一般推荐加入学习率、batch、seed等超参数。

python train.py --learning ... --seed ... --hidden_size ...

步骤3:确定调参工具

在调试和训练模型的过程中,肯定需要多次训练,此时TensorBoard可以非常好的管理实验日志。

调参是非常乏味的,比较重要的是确定好学习率和batch size。学习率和优化器有非常多的选择,SGD是一个比较好的开始。一般而言模型越深,学习率越小。batch size越大,学习率越大。

步骤4:减少随机性

深度学习模型有一定的随机性,模型是否可复现非常重要。在比赛期间,非常推荐提前把不同fold的次序存储到文件,减少随机性。

把配置文件、模型权重、日志文件保存好,这样每次都可以进行实验对比。

  • Pytorch设置SEED
torch.manual_seed(SEED)
torch.cuda.manual_seed_all(SEED)
np.random.seed(SEED)
random.seed(SEED)
torch.backends.cudnn.deterministic = True
  • TF 1.X设置SEED
from tfdeterminism import patch
patch()
os.environ['PYTHONHASHSEED']=str(SEED)
random.seed(SEED)
np.random.seed(SEED)
tf.set_random_seed(SEED)
  • TF 2.X设置SEED
os.environ['TF_DETERMINISTIC_OPS'] = '1' os.environ['PYTHONHASHSEED']=str(SEED)
random.seed(SEED)
np.random.seed(SEED)
tf.random.set_seed(SEED)

报名/辅导/项目咨询请添加Molly

Wechat微信:mollywei007

本平台提供国际竞赛报名、辅导、AP/IB/IGCSE/A-LEVEL课程培训、初高中科研项目定制、夏校/美本申请服务
上一篇

Kaggle赛题解析:HuBMAP血管分割

下一篇

2023 青少年突破性挑战(BJC)竞赛介绍

评论已经被关闭。

插入图片
返回顶部