cloud_ml_engine scaleType реализация - PullRequest
0 голосов
/ 21 января 2019

Я пытаюсь реализовать функциональность настройки гиперпараметра движка google cloud ml с помощью scikit-optimize (skopt).Я не уверен, как последовательно преобразовать scaleType в ml-engine в skopt.space.Real * prior s.

Uniform достаточно прост, иlog -iform выглядит эквивалентным в каждом, но я не совсем уверен, что реализация последовательна.Я также не уверен, как реализовать UNIT_REVERSE_LOG_SCALE движка ml, если LOG_SCALE соответствует skopt log-uniform ранее.Распределение log-uniform, похоже, ведет себя не так, как хотелось бы для параметров, отличных от 0 - например, если вы хотите масштабировать между 0.9 и 0.999, распределение близко к равномерному (см. Первый график ниже).

Код и визуализация с использованием skopt s log-uniform и нескольких пользовательских преобразований ниже.

#!/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()

distributions

Myвопросы:

  • ml engine реализует LOG_SCALE как log-uniform или custom-log-uniform из вышеперечисленного, или что-то еще?
  • ml engine реализует REVERSE_LOG_SCALEкак custom-reverse-log-uniform выше или что-то еще?

Ответы [ 2 ]

0 голосов
/ 26 января 2019

Для параметра с допустимой областью [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).

0 голосов
/ 22 января 2019

Cloud ML Engine не использует scikit learn для настройки гиперпараметров, а использует пользовательские реализации, которые позволяют нам предоставлять самые современные результаты.

...