社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

【深度学习】深度学习代码规范

机器学习初学者 • 3 月前 • 134 次点击  

每一场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)





    

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