KerasTuner:超参数调优 / API 文档 / HyperParameters

超参数

[源代码]

HyperParameters

keras_tuner.HyperParameters()

同时包含超参数空间和当前值的容器。

可以将 HyperParameters 实例作为参数传递给 HyperModel.build(hp) 来构建模型。

为了防止用户依赖于不活跃的超参数值,只有活跃的超参数才应该在 HyperParameters.values 中具有值。

属性

  • space:一个 HyperParameter 对象列表。
  • values:一个映射超参数名称到当前值的字典。

[源代码]

Boolean 方法

HyperParameters.Boolean(name, default=False, parent_name=None, parent_values=None)

在 True 和 False 之间进行选择。

参数

  • name:一个字符串。参数的名称。在搜索空间中,每个 HyperParameter 实例的名称必须唯一。
  • default:布尔值,参数的默认返回值。如果未指定,则默认值为 False。
  • parent_name:可选字符串,指定父 HyperParameter 的名称,用作激活当前 HyperParameter 的条件。
  • parent_values:可选列表,包含父 HyperParameter 的值,用作激活当前 HyperParameter 的条件。

返回

超参数的值,如果超参数不活跃则为 None。


[源代码]

Choice 方法

HyperParameters.Choice(
    name, values, ordered=None, default=None, parent_name=None, parent_values=None
)

从预定义的一组可能值中选择一个值。

参数

  • name:一个字符串。参数的名称。在搜索空间中,每个 HyperParameter 实例的名称必须唯一。
  • values:一个可能值的列表。值必须是 int、float、str 或 bool。所有值必须是相同的类型。
  • ordered:可选布尔值,表示传递的值是否应被视为有序。对于 float/int 值,默认为 True。对于任何其他值,则必须为 False
  • default:参数的可选默认返回值。如果未指定,则默认值为
    • 如果 None 是 values 中的一个选项,则为 None
    • 否则为 values 中的第一个条目。
  • parent_name:可选字符串,指定父 HyperParameter 的名称,用作激活当前 HyperParameter 的条件。
  • parent_values:可选列表,包含父 HyperParameter 的值,用作激活当前 HyperParameter 的条件。

返回

超参数的值,如果超参数不活跃则为 None。


[源代码]

Fixed 方法

HyperParameters.Fixed(name, value, parent_name=None, parent_values=None)

固定、不可调优的值。

参数

  • name:一个字符串。参数的名称。在搜索空间中,每个 HyperParameter 实例的名称必须唯一。
  • value:要使用的值(可以是任何 JSON 可序列化的 Python 类型)。
  • parent_name:可选字符串,指定父 HyperParameter 的名称,用作激活当前 HyperParameter 的条件。
  • parent_values:可选列表,包含父 HyperParameter 的值,用作激活当前 HyperParameter 的条件。

返回

超参数的值,如果超参数不活跃则为 None。


[源代码]

Float 方法

HyperParameters.Float(
    name,
    min_value,
    max_value,
    step=None,
    sampling="linear",
    default=None,
    parent_name=None,
    parent_values=None,
)

浮点值超参数。

示例 #1

hp.Float(
    "image_rotation_factor",
    min_value=0,
    max_value=1)

[0, 1] 区间内的所有值被采样的概率相等。

示例 #2

hp.Float(
    "image_rotation_factor",
    min_value=0,
    max_value=1,
    step=0.2)

step 是样本之间的最小距离。可能的值为 [0, 0.2, 0.4, 0.6, 0.8, 1.0]。

示例 #3

hp.Float(
    "learning_rate",
    min_value=0.001,
    max_value=10,
    step=10,
    sampling="log")

sampling="log" 时,step 在样本之间相乘。可能的值为 [0.001, 0.01, 0.1, 1, 10]。

参数

  • name:一个字符串。参数的名称。在搜索空间中,每个 HyperParameter 实例的名称必须唯一。
  • min_value:浮点数,范围的下界。
  • max_value:浮点数,范围的上限。
  • step:可选浮点数,范围内两个连续样本之间的距离。如果未指定,则可以在该区间内采样任何值。如果 sampling="linear",它将是两个样本之间的最小加法。如果 sampling="log",它将是两个样本之间的最小乘法。
  • sampling:字符串。可以是 "linear"、"log" 或 "reverse_log" 中的一个。默认为 "linear"。采样值时,始终从 [0.0, 1.0) 范围内的值开始。sampling 参数决定了值如何映射到 [min_value, max_value] 范围。"linear": min_value + value * (max_value - min_value) "log": min_value * (max_value / min_value) ^ value "reverse_log": (max_value - min_value * ((max_value / min_value) ^ (1 - value) - 1))
  • default:浮点数,参数的默认返回值。如果未指定,则默认值为 min_value
  • parent_name:可选字符串,指定父 HyperParameter 的名称,用作激活当前 HyperParameter 的条件。
  • parent_values:可选列表,包含父 HyperParameter 的值,用作激活当前 HyperParameter 的条件。

返回

超参数的值,如果超参数不活跃则为 None。


[源代码]

Int 方法

HyperParameters.Int(
    name,
    min_value,
    max_value,
    step=None,
    sampling="linear",
    default=None,
    parent_name=None,
    parent_values=None,
)

整数超参数。

请注意,与 Python 的 range 函数不同,max_value *包含*在参数可以取的值之内。

示例 #1

hp.Int(
    "n_layers",
    min_value=6,
    max_value=12)

可能的值为 [6, 7, 8, 9, 10, 11, 12]。

示例 #2

hp.Int(
    "n_layers",
    min_value=6,
    max_value=13,
    step=3)

step 是样本之间的最小距离。可能的值为 [6, 9, 12]。

示例 #3

hp.Int(
    "batch_size",
    min_value=2,
    max_value=32,
    step=2,
    sampling="log")

sampling="log" 时,step 在样本之间相乘。可能的值为 [2, 4, 8, 16, 32]。

参数

  • name:一个字符串。参数的名称。在搜索空间中,每个 HyperParameter 实例的名称必须唯一。
  • min_value:整数,范围的下限,包含在内。
  • max_value:整数,范围的上限,包含在内。
  • step:可选整数,范围内两个连续样本之间的距离。如果未指定,则可以在该区间内采样任何整数。如果 sampling="linear",它将是两个样本之间的最小加法。如果 sampling="log",它将是两个样本之间的最小乘法。
  • sampling:字符串。可以是 "linear"、"log" 或 "reverse_log" 中的一个。默认为 "linear"。采样值时,始终从 [0.0, 1.0) 范围内的值开始。sampling 参数决定了值如何映射到 [min_value, max_value] 范围。"linear": min_value + value * (max_value - min_value) "log": min_value * (max_value / min_value) ^ value "reverse_log": (max_value - min_value * ((max_value / min_value) ^ (1 - value) - 1))
  • default:整数,参数的默认返回值。如果未指定,则默认值为 min_value
  • parent_name:可选字符串,指定父 HyperParameter 的名称,用作激活当前 HyperParameter 的条件。
  • parent_values:可选列表,包含父 HyperParameter 的值,用作激活当前 HyperParameter 的条件。

返回

超参数的值,如果超参数不活跃则为 None。


[源代码]

conditional_scope 方法

HyperParameters.conditional_scope(parent_name, parent_values)

打开一个作用域来创建条件超参数。

在此作用域下创建的所有 HyperParameter 仅在由 parent_name 指定的父 HyperParameter 等于 parent_values 中提供的值之一时才会激活。

当条件不满足时,在此作用域下创建 HyperParameter 会注册该 HyperParameter,但会返回 None 而不是具体的值。

请注意,此作用域下的任何 Python 代码都将执行,无论条件是否满足。

此功能用于 Tuner 收集搜索空间和当前 trial 的更多信息。对于模型选择特别有用。如果父 HyperParameter 用于模型选择,那么模型中的 HyperParameter 应该只在模型被选择时才激活,这可以使用 conditional_scope 来实现。

示例

def MyHyperModel(HyperModel):
    def build(self, hp):
        model = Sequential()
        model.add(Input(shape=(32, 32, 3)))
        model_type = hp.Choice("model_type", ["mlp", "cnn"])
        with hp.conditional_scope("model_type", ["mlp"]):
            if model_type == "mlp":
                model.add(Flatten())
                model.add(Dense(32, activation='relu'))
        with hp.conditional_scope("model_type", ["cnn"]):
            if model_type == "cnn":
                model.add(Conv2D(64, 3, activation='relu'))
                model.add(GlobalAveragePooling2D())
        model.add(Dense(10, activation='softmax'))
        return model

参数

  • parent_name:一个字符串,指定父 HyperParameter 的名称,用作激活当前 HyperParameter 的条件。
  • parent_values:一个列表,包含父 HyperParameter 的值,用作激活当前 HyperParameter 的条件。

[源代码]

get 方法

HyperParameters.get(name)

返回此超参数集当前的返回值。