机器算法的批量训练或自动调参

写在前面

我写了一个时间序列预测的程序,但是相同的时间序列我有几十个,每个序列想单独用一个模型。然后就需要训练几十个模型,但是手动训练太费时费力。为了解决这个问题,我尝试性的写了一个for循环,但是不知为何,每次开始训练第二个模型时,优化器的state就全部变为0,到现在我都没找到最终原因。无可奈何,想到了从外部运行程序,每次传递需要的参数即可。

此方法同样适用于自动调参,可以从外部设置参数的变化区间,然后传递相应的参数给模型。

此方法需要用到 argparse 和 import os 两个包,案例如下:

1需要自动训练的 main程序

import argparse

# 建立args
parser = argparse.ArgumentParser()

# 需要自动设置的参数
parser.add_argument("--processID", type=int, default=1)

# 封装args
args = parser.parse_args()


#主程序小例子
print(args.processID)

args是一个自动传参的包,如果有朋友不知道args怎么用,那就需要自己查了。

2.接下来就是最主要的auto_run程序了

import os
import numpy as np

if __name__ == "__main__":


    process_id = np.arange(1, 44)
    
    for p_id in process_id:
        os.system(f'python main.py --processID {p_id}') # 调用主程序并传入参数

我有43个模型要训练,所以process_id是一个从1到43的向量。如果你的auto_run程序和main程序在同一个环境下的话,直接通过如下格式:

os.system(f'python xx.py --主程序参数 {auto_run变量}')

调用就可以了,如果不在同一环境下的话,那你得设置一下它的路径。

我测试了一下,你分别建立这两个文件,在同一个环境(即目录)底下是可以用的。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>