【问题标题】:h2o checkpoint parameter change error - but no parameter changed??h2o 检查点参数更改错误 - 但没有更改参数??
【发布时间】:2017-06-03 22:39:41
【问题描述】:

我正在尝试导出“模型”的权重和偏差,在该模型中我最初没有使用“export_weights_and_biases = TRUE”训练模型

因此,我想尝试检查模型并尝试在新的“model2”中导出_weights_and_biases = TRUE。

但是,尽管没有更改任何参数 - 并确保 nfolds=10 就像在原始“模型”中一样,但检查点模型几乎立即继续返回参数更改错误(h2o 版本3.10.4.6):

water.exceptions.H2OIllegalArgumentException: Cannot change parameter: '_nfolds': 10 -> 0

water.exceptions.H2OIllegalArgumentException: Cannot change parameter: '_nfolds': 10 -> 0
    at hex.deeplearning.DeepLearningModel$DeepLearningParameters$Sanity.checkIfParameterChangeAllowed(DeepLearningModel.java:2078)
    at hex.deeplearning.DeepLearning$DeepLearningDriver.buildModel(DeepLearning.java:249)
    at hex.deeplearning.DeepLearning$DeepLearningDriver.computeImpl(DeepLearning.java:211)
    at hex.ModelBuilder$Driver.compute2(ModelBuilder.java:169)
    at hex.deeplearning.DeepLearning$DeepLearningDriver.compute2(DeepLearning.java:204)
    at water.H2O$H2OCountedCompleter.compute(H2O.java:1241)
    at jsr166y.CountedCompleter.exec(CountedCompleter.java:468)
    at jsr166y.ForkJoinTask.doExec(ForkJoinTask.java:263)
    at jsr166y.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:974)
    at jsr166y.ForkJoinPool.runWorker(ForkJoinPool.java:1477)
    at jsr166y.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:104)

Error: water.exceptions.H2OIllegalArgumentException: Cannot change parameter: '_nfolds': 10 -> 0

任何想法如何解决这个问题?我要做的就是获得我原来的“模型”的所有权重和偏差。

谢谢!

【问题讨论】:

    标签: r h2o checkpointing


    【解决方案1】:

    我自己解决了这个问题:

    1) Checkpoint 只能在原始模型的情况下进行:

    • 没有使用过简历
    • 或使用 CV 但折叠分配设置为模
    • 当然还有如果其他某些参数没有更改,例如 nfolds。

    2) 如果可能的话,仍然想知道如何提取我的模型的权重和偏差。谢谢。

    【讨论】:

    • 假设model.dl 是指向您的深度学习模型的指针,您可以使用model.dl@model$weightsmodel.dl@model$biases 分别提取包含权重和偏差信息的列表。然后,循环遍历列表以提取列表的name 属性(返回帧ID)并使用h2o.getFrame() 返回帧本身。
    • 谢谢 Mauna +1。如果我在原始模型中没有设置 export_weights_and_biases=TRUE,则您的解决方案有效。因此,我尝试检查我的模型,以便我可以将其设置为 = TRUE。但是 b/c 我没有使用 Modulo CV,我无法检查点。
    • 有什么建议可以从模型的 export_weights_and_biases 参数未设置为 TRUE 的模型中提取权重和偏差?
    • 除了重新训练模型之外,我想不出任何办法。想法如下:使用h2o.loadModel() 将模型加载到model.dl。然后您可以使用model.dl@parameters 获取当前参数集的列表并将set export_weights_and_biases 添加为TRUE。最后,在h2o.deeplearning() 上使用do.call() 和更新的参数列表来重新训练模型。
    • 谢谢。我会试一试。虽然我没有尝试过 do.call,但我尝试使用与原始模型完全相同的所有参数、种子和数据集重新训练新模型 - 但我无法让 h2o 重现具有相同通用性的模型原始模型。事实上,所有经过再训练的模型都 100% 未能很好地泛化——但所有模型都可以很好地训练、验证和测试。我想我对我的原始模型很幸运——我真的需要以某种方式提取权重和偏差。我已经读过它可能与 POJO 相关,但我不确定。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-17
    相关资源
    最近更新 更多