cloud_ml_engine scaleType实现

时间:2019-01-21 00:54:09

标签: deep-learning google-cloud-ml hyperparameters scikits

我正在尝试使用scikit-optimize(skopt)实现Google Cloud ml引擎超参数调整的功能。我不确定如何将ml-engine的scaleType转换为skopt.space.Realprior

统一很简单,对数统一看起来在每个方面都具有等效性-但我不完全确定实现是否一致。如果UNIT_REVERSE_LOG_SCALELOG_SCALE的{​​{1}}一致,我也不确定如何实现ml引擎的skopt。对于log-uniform以外的参数,log-uniform分布的行为似乎并不理想-例如如果要在00.9之间缩放,则分布接近均匀(请参见下面的第一幅图)。

使用0.999 s skopt和下面的几个自定义转换进行代码和可视化。

log-uniform

distributions

我的问题是:

  • #!/usr/bin/python import numpy as np import matplotlib.pyplot as plt import skopt def sample_custom_log_uniform(min_val, max_val, n_samples): sample = skopt.space.uniform(0, 1).rvs(n_samples) return min_val + (10 ** sample - 1) / 9 *(max_val - min_val) def sample_custom_reverse_log_uniform(min_val, max_val, n_samples): sample = skopt.space.uniform(0, 1).rvs(n_samples) return max_val - (10 ** sample - 1) / 9 *(max_val - min_val) def sample(min_val, max_val, prior='log-uniform', n_samples=100000): if prior == 'custom-log-uniform': return sample_custom_log_uniform(min_val, max_val, n_samples) elif prior == 'custom-reverse-log-uniform': return sample_custom_reverse_log_uniform(min_val, max_val, n_samples) else: return skopt.space.Real(min_val, max_val, prior=prior).rvs(n_samples) priors = ( 'log-uniform', 'custom-log-uniform', 'custom-reverse-log-uniform') fig, axes = plt.subplots(1, len(priors)) for (prior, ax) in zip(priors, axes): ax.hist(sample(0.9, 0.999, prior)) ax.set_title(prior) ax.set_yticklabels([]) plt.show() 是否将ml engine实施为以上的LOG_SCALElog-uniform,还是其他?
  • custom-log-uniform是否像上面的ml engine一样实现REVERSE_LOG_SCALE,还是其他?

2 个答案:

答案 0 :(得分:1)

对于具有可行区域[a,b]的参数:UNIT_LOG_SCALE将可行空间对数地缩放为[0,1]。这会将值x映射到log(x / a)/ log(b / a)。 UNIT_REVERSE_LOG_SCALE对数地将可行空间“反向”缩放为[0,1]。这会将值x映射到1.0-log((b + a-x)/ a)/ log(b / a)。

答案 1 :(得分:0)

Cloud ML Engine并未使用scikit learning进行超参数调整,而是使用自定义实现,使我们能够提供最先进的结果。