我有一个scikit-learn模型,我可以使用AI Platform training在GCP上训练它。我还想使用AI Platform training进行超参数调优。这是可能的,只需要传递一个带有参数及其范围的YAML:
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,但是我应该向代码返回什么来进行超参数调优(我猜是使用贝叶斯优化),以便它理解这种参数选择是无效的?
# 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的精确度就足够了吗?或者我应该返回None或NaN?我没有找到任何关于这个主题的文档。
附加问题:当我使用YAML时,我只能传递字符串,而不能像None或NULL那样传递link doc
- parameterName: FT_norm
type: CATEGORICAL
categoricalValues: ['l1', 'l2', 'None']在将值传递给模型之前,我需要在python代码中直接将'None'转换为None。有没有更好的方法来处理这种情况?(我正在使用gcloud cli)例如使用GCP python客户端库?
发布于 2019-12-18 22:13:25
最后,我实现了上面描述的想法,当给sciki learn的参数不正确时(就像我们有df_min>df_max时),返回度量0.0 (在我的测试中是准确的)。
正如您在下面看到的,在超参数无效的情况下返回值0.0时,没有报告应计项目:

还发现代码只接受浮点数或字符串作为指标的输入,如下所示,但我没有找到更多详细解释这一点的文档:
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%正确的,但似乎如预期的那样工作。
https://stackoverflow.com/questions/59343183
复制相似问题