【问题标题】:contents of Trials() object in hyperopthyperopt 中 Trials() 对象的内容
【发布时间】:2019-03-07 13:28:24
【问题描述】:

这个查询是指在 fmin 中使用试验作为参数。

trials = Trials()
best = fmin(objective, space=hp.uniform('x', -10, 10), algo=tpe.suggest,
    max_evals=100, trials=trials)

文档 (https://github.com/hyperopt/hyperopt/wiki/FMin) 指出,试验对象有 trials.trials、trials.results、trials.losses()trials.statuses()

但是,我看到了诸如 trials.best_trialtrials.trial_attachments 之类的用法,这些用法在文件。

现在我想知道如何获取 trials 对象的所有内容的列表?对象类型是 hyperopt.base.Trials

【问题讨论】:

    标签: python-3.x hyperopt


    【解决方案1】:

    根据Hyperopt code: `Trials - 至少包含子文档的文档列表

    ['spec'] - the specification of hyper-parameters for a job
    ['result'] - the result of Domain.evaluate(). Typically includes:
        ['status'] - one of the STATUS_STRINGS
        ['loss'] - real-valued scalar that hyperopt is trying to minimize
    ['idxs'] - compressed representation of spec
    ['vals'] - compressed representation of spec
    ['tid'] - trial id (unique in Trials list)`
    

    【讨论】:

    • 谢谢。我没想过检查代码。代码里已经很清楚了。
    【解决方案2】:

    这只是我对 Hyperopt 代码的调查的部分答案:

    有一个 ._dynamic_trials 存储用于优化的信息。

    【讨论】:

    • 感谢您的回答,但我不相信您已经回答了这个问题。如果您相信您可以编辑您的答案以使其更清楚吗?请参阅how to answer 了解更多信息。
    • 将其标记为部分答案;这更好吗,还是应该是评论?
    【解决方案3】:

    如果您只想将所有内容转储到屏幕上,您可以执行this 之类的操作。以下是在 Trials 对象上使用该策略的方法:

    from hyperopt import Trials
    
    def dump(obj):
       for attr in dir(obj):
           if hasattr( obj, attr ):
               print( "obj.%s = %s" % (attr, getattr(obj, attr)))
    
    tpe_trials = Trials()
    
    dump(tpe_trials)
    
    

    这将打印Trials 对象的所有属性和方法。因为太长了,这里就不一一列举了,这里有几行:

    obj.__class__ = <class 'hyperopt.base.Trials'>
    obj.__delattr__ = <method-wrapper '__delattr__' of Trials object at 0x0000012880AA3108>
    obj.__dict__ = {'_ids': set(), '_dynamic_trials': [], '_exp_key': None, 'attachments': {}, '_trials': []}
    obj.__dir__ = <built-in method __dir__ of Trials object at 0x0000012880AA3108>
    
    . . .
    
    obj._ids = set()
    obj._insert_trial_docs = <bound method Trials._insert_trial_docs of <hyperopt.base.Trials object at 0x0000012880AA3108>>
    obj._trials = []
    obj.aname = <bound method Trials.aname of <hyperopt.base.Trials object at 0x0000012880AA3108>>
    

    但我发现查看源代码更有用。在__init__ 函数下声明了一些属性,然后有一组使用@property 装饰器声明的属性。方法都是defs。

    不确定您的环境是如何设置的,但该文件存储在我的 conda 环境中..\env\Lib\site-packages\yperopt\base.pyclass Trials(object) 应该在第 228 行声明。

    【讨论】:

    • 我收到“AllTrialsFailed:”错误。不知道为什么。
    猜你喜欢
    • 2020-06-05
    • 2019-07-22
    • 2017-05-13
    • 1970-01-01
    • 1970-01-01
    • 2012-12-22
    • 2015-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多