gpt4 book ai didi

tensorflow - 使用 keras tuner 设置模型时,是否需要在条件范围内定义层中的单元数?

转载 作者:行者123 更新时间:2023-12-04 09:21:18 28 4
gpt4 key购买 nike

根据 Keras Tuner 示例 herehere ,如果您想使用超参数定义深度学习模型中的层数和每层的单位,您可以执行以下操作:

for i in range(hp.Int('num_layers', 1, 10)):
model.add(layers.Dense(units=hp.Int('unit_' + str(i), 32, 512, 32)))
然而,正如其他人所指出的 herehere在 oracle 看到一个带有 num_layers = 10 的模型之后它将始终为 unit_0 赋值通过 unit_9 ,即使 num_layers小于 10。
如果 num_layers = 1例如,只有 unit_0将用于构建模型。但是, unit_1通过 unit_9将被定义和 事件 在超参数中。
oracle 是否“知道” unit_1通过 unit_9没有真正用于构建模型(因此忽略了它们对影响试验结果的相关性)?
或者,它是否假设 unit_1通过 unit_9被使用是因为它们已被定义(例如调用 hp.get('unit_9') 将返回一个值)?
在后一种情况下 oracle 正在使用错误信息来驱动调整过程 .结果 收敛时间会更长 (充其量)和 错误收敛 由于将相关性分配给未使用的超参数(最坏的情况)而得到解决方案。
是否应该使用 conditional scopes 实际定义模型? , 像这样?
num_layers = hp.Int('num_layers', 1, 10)
for i in range(num_layers):
with hp.conditional_scope('num_layers', list(range(i + 1, 10 + 1))):
model.add(layers.Dense(units=hp.Int('unit_' + str(i), 32, 512, 32)))
像这样定义模型时,如果 num_layers < 10 , 调用 hp.get('unit_9')将返回 ValueError: Conditional parameter unit_10 is not currently active ,正如预期的那样。

最佳答案

使用条件范围是最好的,因为它可以正确识别事件参数。如果不使用条件作用域,至少目前不可能让调谐器知道实际使用了哪些参数。
但是,当以更简单的方式使用 RandomSearch 时(允许存在非事件参数),结果应该完全相同。当开始一个新的试验时,调谐器会检查所有的可能性,但会在真正开始试验之前拒绝无效的。
对于现有的调谐器,我认为只有贝叶斯受此影响很大。我不是 100% 确定 Hyperband 的情况;但是对于 RandomSearch,这两种方法完全相同(除了显示使人们感到困惑的非事件参数)。

关于tensorflow - 使用 keras tuner 设置模型时,是否需要在条件范围内定义层中的单元数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63100699/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com