Sacred - передать все параметры как один - PullRequest
0 голосов
/ 22 ноября 2018

При использовании Sacred необходимо передать все переменные из конфигурации эксперимента в основную функцию, например,

ex = Experiment('iris_rbf_svm')

@ex.config
def cfg():
  C = 1.0
  gamma = 0.7

@ex.automain
def run(C, gamma):
  iris = datasets.load_iris()
  per = permutation(iris.target.size)
  iris.data = iris.data[per]
  iris.target = iris.target[per]
  clf = svm.SVC(C, 'rbf', gamma=gamma)
  clf.fit(iris.data[:90],
          iris.target[:90])
  return clf.score(iris.data[90:],
                   iris.target[90:])

Как видите, в этом эксперименте есть 2 переменные C и gamma, и они передаются в основную функцию.

В реальных сценариях существуют десятки экспериментальных переменных, и передача их всех в основную функцию становится действительно загроможденной.Есть ли способ передать их все как словарь?Или, может быть, как объект с атрибутами?

Хорошее решение приведет к следующему:

@ex.automain
def run(config):
    config.C      # Option 1
    config['C']   # Option 2 

Ответы [ 2 ]

0 голосов
/ 04 марта 2019

Да, для этого можно использовать специальное значение _config:

ex = Experiment('iris_rbf_svm')

@ex.config
def cfg():
  C = 1.0
  gamma = 0.7

@ex.automain
def run(_config):
  C = _config['C']
  gamma = _config['gamma']
0 голосов
/ 04 декабря 2018

Самое элегантное решение, которое я мог найти

ex = Experiment('iris_rbf_svm')

@ex.config
def cfg():
    C = 1.0
    gamma = 0.7

    params = {'C': C, 'gamma': gamma}

@ex.automain
def run(params):
    iris = datasets.load_iris()
    per = permutation(iris.target.size)
    iris.data = iris.data[per]
    iris.target = iris.target[per]
    clf = svm.SVC(params['C'], 'rbf', gamma=params['gamma'])
    clf.fit(iris.data[:90],
            iris.target[:90])
    return clf.score(iris.data[90:],
                     iris.target[90:])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...