首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用AI平台超参数调优能力时,如何强制参数依赖?

使用AI平台超参数调优能力时,如何强制参数依赖?
EN

Stack Overflow用户
提问于 2019-12-15 18:55:31
回答 1查看 135关注 0票数 1

我有一个scikit-learn模型,我可以使用AI Platform trainingGCP上训练它。我还想使用AI Platform training进行超参数调优。这是可能的,只需要传递一个带有参数及其范围的YAML:

代码语言:javascript
复制
params:
- parameterName: max_df
  type: DOUBLE
  minValue: 0.0
  maxValue: 1.0
  scaleType: UNIT_LINEAR_SCALE
- parameterName: min_df
  type: DOUBLE
  minValue: 0
  maxValue: 1.
  scaleType: UNIT_LINEAR_SCALE

这里的问题是两个参数之间存在一些依赖关系:min_df<max_df。如果不是这样的话,scikit-learn将会像预期的那样失败。

在YAML中似乎不可能表达这样的依赖关系。

我可以调优失败的试验次数,但如果我不走运,对于第一个作业,我有df_min>df_max,那么整个超参数调优过程将停止。这似乎不是一个有效的选择。link doc

我可以在我的python代码中控制这一点,并确保df_min<df_max,但是我应该向代码返回什么来进行超参数调优(我猜是使用贝叶斯优化),以便它理解这种参数选择是无效的?

代码语言:javascript
复制
# this is for hyperparameter tuning
    hpt = hypertune.HyperTune()
    hpt.report_hyperparameter_tuning_metric(
        hyperparameter_metric_tag='accuracy',
        metric_value=accuracy,
        global_step=0)

仅仅返回0.0的精确度就足够了吗?或者我应该返回NoneNaN?我没有找到任何关于这个主题的文档。

附加问题:当我使用YAML时,我只能传递字符串,而不能像None或NULL那样传递link doc

代码语言:javascript
复制
- parameterName: FT_norm
      type: CATEGORICAL
      categoricalValues: ['l1', 'l2', 'None']

在将值传递给模型之前,我需要在python代码中直接将'None'转换为None。有没有更好的方法来处理这种情况?(我正在使用gcloud cli)例如使用GCP python客户端库?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-18 22:13:25

最后,我实现了上面描述的想法,当给sciki learn的参数不正确时(就像我们有df_min>df_max时),返回度量0.0 (在我的测试中是准确的)。

正如您在下面看到的,在超参数无效的情况下返回值0.0时,没有报告应计项目:

还发现代码只接受浮点数或字符串作为指标的输入,如下所示,但我没有找到更多详细解释这一点的文档:

代码语言:javascript
复制
File "/root/.local/lib/python3.5/site-packages/hypertune/hypertune.py", line 62, in report_hyperparameter_tuning_metric
    metric_value = float(metric_value)
TypeError: float() argument must be a string or a number, not 'NoneType'

我敢肯定这是100%正确的,但似乎如预期的那样工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59343183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档