什么是 hp.Discrete 和 hp.Realinterval?我可以在 hp.realinterval 中包含更多值而不仅仅是 2 吗?

Posted

技术标签:

【中文标题】什么是 hp.Discrete 和 hp.Realinterval?我可以在 hp.realinterval 中包含更多值而不仅仅是 2 吗?【英文标题】:What are hp.Discrete and hp.Realinterval? Can I include more values in hp.realinterval instead of just 2? 【发布时间】:2019-10-26 19:35:06 【问题描述】:

我在 Tensorflow 2.0-beta0 中使用 HParams Dashboard 的超参数,正如此处所建议的 https://www.tensorflow.org/tensorboard/r2/hyperparameter_tuning_with_hparams

我对第 1 步感到困惑,找不到更好的解释。我的问题与以下几行有关:

HP_NUM_UNITS = hp.HParam('num_units', hp.Discrete([16, 32]))
HP_DROPOUT = hp.HParam('dropout', hp.RealInterval(0.1, 0.2))
HP_OPTIMIZER = hp.HParam('optimizer', hp.Discrete(['adam', 'sgd']))

我的问题: 我想尝试更多的 dropout 值,而不仅仅是两个(0.1 和 0.2)。如果我在其中写入更多值,则会引发错误-“最多可以给出 2 个参数”。我试图查找文档,但找不到这些 hp.Discrete 和 hp.RealInterval 函数的来源。 任何帮助,将不胜感激。谢谢!

【问题讨论】:

我还想对相同的文档进行一些澄清。在下面链接的示例中,离散和 RealInterval 的行为方式相同。 tensorflow.org/tensorboard/… 【参考方案1】:

好问题。他们的笔记本教程在很多方面都缺乏。无论如何,以下是您在特定分辨率下的操作方式res

for dropout_rate in tf.linspace(
      HP_DROPOUT.domain.min_value,
      HP_DROPOUT.domain.max_value,
      res,): 

【讨论】:

【参考方案2】:

在我看来,implementation 似乎不是 GridSearch,而是 MonteCarlo/Random 搜索(注意:这不是 100% 正确,请参阅下面的编辑)

因此,在每次迭代中,都会选择该实际区间的随机浮点数

如果您想要 GridSearch 行为,只需使用“离散”即可。这样你甚至可以将 GridSearch 与 Random search 混合搭配,非常酷!

编辑:22 年 7 月 27 日:(基于 @dpoiesz 的评论)

只是为了让它更清楚一点,因为它是从间隔中采样的,所以会返回具体的值。因此,将它们添加到网格维度并使用它们执行网格搜索

【讨论】:

在问题链接的指南中,discrete 和 RealInterval 的行为方式相同。他们的示例执行网格搜索【参考方案3】:

RealInterval 是一个最小、最大元组,hparam 将在其中选择一个数字。Here 一个指向实现的链接以便更好地理解。 问题是,由于它目前已实现,除非您调用 sample_uniform 方法,否则两者之间似乎没有任何区别。

【讨论】:

【参考方案4】:

请注意,tf.linspace 在保存当前值时会破坏上述示例代码。

见https://github.com/tensorflow/tensorboard/issues/2348

特别是 OscarVanL 对他快速而肮脏的解决方法的评论。

【讨论】:

以上是关于什么是 hp.Discrete 和 hp.Realinterval?我可以在 hp.realinterval 中包含更多值而不仅仅是 2 吗?的主要内容,如果未能解决你的问题,请参考以下文章

什么是jwks?刷新和访问令牌的 jwks 到底是什么?

什么是类?类与对象的区别是什么?

什么叫基本表?什么是视图?二者的区别和联系是什么?

什么是cookie?什么是session?session和cookie有什么区别?

什么是类?什么是对象?类和对象有什么关系?

为什么和什么是 DevOps?