
通过使用YAML文件配置超参数来加快研究速度!
介绍
与第一次尝试编写不含错误的代码一样,第一次尝试训练出正确的模型也是不可能的。
有一些在机器学习和深度学习领域有经验的人都知道,你经常需要花费很多时间选择模型的正确超参数。这些超参数例如学习率、批量大小和输出中的类数,但这些只是一些最常见的超参数,一个项目可能有上百个这样的参数。
通过改变超参数,我们可以得到不同的结果(更好或更差),而在某个时刻,跟踪所有已经进行的测试变得非常困难。
我过去做的事情是:我习惯手动将所有这些超参数写在Excel表格中,并在旁边写下每个实验的结果,例如损失值。后来,我“进化”了,开始为超参数编写配置文件,其中放入我想要测试的各种值。我过去会编写自定义的Python函数,用于读取这些值并将它们放入训练函数中。YAML文件基本上是一个层次结构构建的文件,您可以插入键和值,如下所示:
data: path: "data/ESC-50" sample_rate: 8000 train_folds: [1, 2, 3] val_folds: [4] test_folds: [5] batch_size: 8model: base_filters: 32 num_classes: 50 optim: lr: 3e-4seed: 0trainer: max_epochs: 10
后来,我发现了Hydra,它是一个开源框架,使整个过程更加简单和快速。
让我们开始吧!
假设我们正在使用PyTorch开发一个简单的机器学习项目。像往常一样,我们为数据集创建一个类,实例化数据加载器,创建模型并进行训练。在这个例子中,我将使用PyTorch Lightning来更好地组织代码,其中我们有一个Trainer对象,类似于您在Keras中的操作。如果您习惯使用PyTorch,您也将很快理解Lightning。