【问题标题】:Training multiple models in series in Keras for hyperparameter optimization在 Keras 中串联训练多个模型以进行超参数优化
【发布时间】:2020-01-30 23:18:34
【问题描述】:

这个想法是使用相同的训练数据集训练多个模型,每次都更改一些参数,以便查看哪个参数效果最好。为了做到这一点,我需要每次都从头开始训练每个模型。

我当前的代码(简化)是:

scores= []

for i in range(n):
    model = Sequential()
    model.add(...)
    model.compile(...)
    model.fit(...)
    scores.append([i, model.score(...)])

for score in scores:
    print(score)

它按预期打印:

[0, 0.89712456798]
[1, 0.76652347349]
[2, 0.83178943210]
...

但我无法理解代码是否执行上述操作,或者相反,是否训练了依赖于前一个模型的模型。

【问题讨论】:

    标签: python keras neural-network tf.keras


    【解决方案1】:

    每次调用

    model = Sequential()
    

    您的模型已重新初始化,因此上面的代码草图确实符合您的要求,即为每次循环迭代从头开始拟合新模型。

    【讨论】:

    • 太棒了!感谢desertnaut的超级及时回答。一遍又一遍地运行带有大量参数的代码(训练大量模型)会影响训练速度吗?我有什么东西(内存问题等......)对理论上的迭代次数造成了限制?
    • @leo 没有我所知道的——我自己也使用过类似的循环(虽然不是用于超参数调整,而是用于性能的统计评估)。
    • 根据我的经验,更改隐藏层中的节点数或批量大小会影响训练速度。但当然取决于你的 CPU 和 GPU。
    • @PySeeker 您似乎误解了 OP" 的问题;当然批量大小和模型大小通常会影响训练时间,但这不是这里的问题,而是关于“(训练大量模型)一遍又一遍
    【解决方案2】:

    您的代码很好。它每次都会创建一个新模型。

    但我建议并行训练多个模型。我刚刚发现了 RayLib,它非常适合这项任务。

    https://ray.readthedocs.io/en/latest/auto_examples/plot_hyperparameter.html

    您的代码包含 4 个并行训练课程,每个课程包含 5 次迭代:

    import ray
    
    @ray.remote
    def train(sequence):
        scores= []
        for i in range(sequence)
            model = Sequential()
            model.add(...)
            model.compile(...)
            model.fit(...)
            scores.append([i, model.score(...)])
        return scores
    
    n=4
    results = []
    for i in range(n):
        results.append(train.remote(5))
    
    results_data = ray.get(results)
    
    for i in results_data:
        print(i)
    

    您可以将超参数作为训练函数的输入,并快速测试不同的架构。 RayLib 需要 Ubuntu。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-28
      • 2019-12-24
      • 2021-09-27
      • 2020-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-21
      相关资源
      最近更新 更多