Py学习  »  机器学习算法

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

AINLP • 2 年前 • 270 次点击  


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

步骤1:确定代码框架

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

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

  • 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)
进技术交流群请添加AINLP小助手微信(id: ainlper)
请备注具体方向+所用到的相关技术点

关于AINLP

AINLP 是一个有趣有AI的自然语言处理社区,专注于 AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括文本摘要、智能问答、聊天机器人、机器翻译、自动生成、知识图谱、预训练模型、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLPer(id:ainlper),备注工作/研究方向+加群目的。


阅读至此了,分享、点赞、在看三选一吧🙏

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/119051
 
270 次点击