发布时间:2022-12-09 18:30
我写了一个时间序列预测的程序,但是相同的时间序列我有几十个,每个序列想单独用一个模型。然后就需要训练几十个模型,但是手动训练太费时费力。为了解决这个问题,我尝试性的写了一个for循环,但是不知为何,每次开始训练第二个模型时,优化器的state就全部变为0,到现在我都没找到最终原因。无可奈何,想到了从外部运行程序,每次传递需要的参数即可。
此方法同样适用于自动调参,可以从外部设置参数的变化区间,然后传递相应的参数给模型。
此方法需要用到 argparse 和 import os 两个包,案例如下:
import argparse
# 建立args
parser = argparse.ArgumentParser()
# 需要自动设置的参数
parser.add_argument("--processID", type=int, default=1)
# 封装args
args = parser.parse_args()
#主程序小例子
print(args.processID)
args是一个自动传参的包,如果有朋友不知道args怎么用,那就需要自己查了。
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变量}')
调用就可以了,如果不在同一环境下的话,那你得设置一下它的路径。
我测试了一下,你分别建立这两个文件,在同一个环境(即目录)底下是可以用的。