网络训练时参数解析的三种方式(yaml、argparser、class属性)

编程入门 行业动态 更新时间:2024-10-24 01:55:57

网络训练时参数解析的<a href=https://www.elefans.com/category/jswz/34/1770022.html style=三种方式(yaml、argparser、class属性)"/>

网络训练时参数解析的三种方式(yaml、argparser、class属性)

一个模型中包含众多的训练参数,如文件保存目录、数据集目录、学习率、epoch数量、模块中的参数等。 参数解析常用的有yaml文件解析还有argparser解析。

但也不是绝对的,我也有看见别人喜欢直接全局定义方式去写,当然在本章我会讲解一种更加简单的参数解析的方式,这也是我个人喜欢的方式。

yaml文件解析

将所有参数都放在yaml文件中,通过读取yaml文件来配置参数。这种常见于比较复杂的项目,例如有多个模型,对应多组参数。这样就可以每个模型配置一个yaml文件,里面对应的是每个模型的对应的参数。

pip install pyyaml

这里我随意写了一个yaml文件

# config.yaml# Directory to save files
save_dir: 'path/to/save/directory'# Dataset directory
dataset_dir: 'path/to/dataset'# Training parameters
learning_rate: 0.001
epochs: 10# Model parameters
model_params:hidden_size: 128num_layers: 3dropout: 0.2

 使用pyyaml进行解析

import yamlwith open('config.yaml', 'r') as file:config = yaml.safe_load(file)print("Save Directory:", config['save_dir'])
print("Dataset Directory:", config['dataset_dir'])
print("Learning Rate:", config['learning_rate'])
print("Epochs:", config['epochs'])
print("Model Parameters:")
print("  Hidden Size:", config['model_params']['hidden_size'])
print("  Num Layers:", config['model_params']['num_layers'])
print("  Dropout:", config['model_params']['dropout'])

这里的打印输出结果为:


Save Directory: path/to/save/directory
Dataset Directory: path/to/dataset
Learning Rate: 0.001
Epochs: 10
Model Parameters:
  Hidden Size: 128
  Num Layers: 3
  Dropout: 0.2

 
argparser解析

argparser解析的形式一般放在train.py文件的最前面,适用于参数相对比较少,每次只需要改一 两个参数的情况。

import argparsedef parse_arguments():parser = argparse.ArgumentParser(description='Your Description Here')parser.add_argument('--output_dir', default='output', help='Directory to save results')parser.add_argument('--data_dir', default='data', help='Directory where dataset is stored')parser.add_argument('--learning_rate', type=float, default=0.001, help='Learning rate for training')parser.add_argument('--epochs', type=int, default=10, help='Number of training epochs')args = parser.parse_args()return argsif __name__ == "__main__":args = parse_arguments()print("Loaded configuration:")print(vars(args))

Loaded configuration:
{'output_dir': 'output', 'data_dir': 'data', 'learning_rate': 0.001, 'epochs': 10}

argparse其还支持命令行运行,这在很多项目中都会用到这种方式。

类定义解析

class parser_args():def __init__(self):self = "vgg16"self.Cuda = Trueself.EPOCHS = 100self.batch_size = 4self.warm = 1def _help(self):stc = {"log_dir": "存放训练模型.pth的路径","Cuda": "是否使用Cuda,如果没有GPU,可以使用CUP,i.e: Cuda=False","EPOCHS": "训练的轮次,这里默认就跑100轮","batch_size": "批量大小,一般为1,2,4","warm": "控制学习率的'热身'或'预热'过程"}

实例化类对象:args = parser_args()

这种方式相对简洁,易于理解,并且在实例化类对象后可以直接访问这些参数。这种方式在参数不太频繁变动的情况下比较的合适。

总结

总体来说,选择使用哪种方式通常取决于项目的需求和个人偏好。YAML 适用于配置文件,argparse 适用于命令行参数,而类属性适用于更结构化的面向对象设计。

更多推荐

网络训练时参数解析的三种方式(yaml、argparser、class属性)

本文发布于:2023-11-15 01:48:11,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1591561.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:三种   属性   参数   方式   网络

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!