Tuner 基类

[源代码]

Tuner

keras_tuner.Tuner(
    oracle,
    hypermodel=None,
    max_model_size=None,
    optimizer=None,
    loss=None,
    metrics=None,
    distribution_strategy=None,
    directory=None,
    project_name=None,
    logger=None,
    tuner_id=None,
    overwrite=False,
    executions_per_trial=1,
    **kwargs
)

Keras 模型的 Tuner 类。

这是所有 Keras 模型调优器的基类 Tuner。它管理 Keras 模型的构建、训练、评估和保存。可以通过继承此类来创建新的调优器。

所有 Keras 相关的逻辑都在 Tuner.run_trial() 及其子程序中。继承 Tuner 时,如果不调用 super().run_trial(),它可以调优任何东西。

参数

  • oracle: Oracle 类实例。
  • hypermodel: HyperModel 类实例(或接受超参数并返回 Model 实例的可调用对象)。当覆盖 Tuner.run_trial() 且不使用 self.hypermodel 时,此参数是可选的。
  • max_model_size: 整数,模型参数中标量的最大数量。大于此数量的模型将被拒绝。
  • optimizer: 可选的优化器。用于覆盖模型 compile 步骤中的 optimizer 参数。如果 hypermodel 没有编译其生成的模型,则必须指定此参数。
  • loss: 可选的损失函数。可用于覆盖模型 compile 步骤中的 loss 参数。如果 hypermodel 没有编译其生成的模型,则必须指定此参数。
  • metrics: 可选的评估指标。可用于覆盖模型 compile 步骤中的 metrics 参数。如果 hypermodel 没有编译其生成的模型,则必须指定此参数。
  • distribution_strategy: 可选的 tf.distribute.Strategy 实例。如果指定,每个试验都将在此范围内运行。例如,tf.distribute.MirroredStrategy(['/gpu:0', '/gpu:1']) 将在两个 GPU 上运行每个试验。目前仅支持单工作器策略。
  • directory: 字符串,工作目录的相对路径。
  • project_name: 字符串,用作此 Tuner 保存文件前缀的名称。
  • tuner_id: 可选字符串,用作此 Tuner 的 ID。
  • overwrite: 布尔值,默认为 False。如果为 False,则在找到同名项目时重新加载该项目。否则,覆盖该项目。
  • executions_per_trial: 整数,每个试验(模型配置)运行的执行次数(从头开始训练模型,从新的初始化开始)。模型指标可能因随机初始化而差异很大,因此通常最好对每个试验运行多次执行,以评估给定超参数值集的性能。
  • **kwargs: BaseTuner 的参数。

属性

  • remaining_trials: 剩余试验次数,如果未设置 max_trials 则为 None。当恢复之前停止的搜索时,此属性很有用。

[源代码]

get_best_hyperparameters 方法

Tuner.get_best_hyperparameters(num_trials=1)

返回由目标确定的最佳超参数。

此方法可用于重新实例化在搜索过程中找到的(未训练的)最佳模型。

示例

best_hp = tuner.get_best_hyperparameters()[0]
model = tuner.hypermodel.build(best_hp)

参数

  • num_trials: 可选的要返回的 HyperParameters 对象数量。

返回值

HyperParameter 对象列表,按从最优到最劣排序。


[源代码]

get_best_models 方法

Tuner.get_best_models(num_models=1)

返回由调优器目标确定的最佳模型。

模型加载时使用了与最佳检查点(在最佳试验的最佳 epoch 结束时)相对应的权重。

此方法用于查询在搜索过程中训练的模型。为了获得最佳性能,建议使用在 search 期间找到的最佳超参数在完整数据集上重新训练您的模型,这些超参数可以通过 tuner.get_best_hyperparameters() 获得。

参数

  • num_models: 可选的要返回的最佳模型数量。默认为 1。

返回值

经过训练的模型实例列表,按从最优到最劣排序。


[源代码]

get_state 方法

Tuner.get_state()

返回此对象的当前状态。

此方法在 save 期间调用。

返回值

一个字典,包含可序列化对象作为状态。


[源代码]

load_model 方法

Tuner.load_model(trial)

从给定的试验加载模型。

对于向 Oracle 报告中间结果的模型,通常 load_model 应通过依赖 trial.best_step 来加载最佳报告的 step

参数

  • trial: 一个 Trial 实例,对应于要加载模型的 Trial

[源代码]

on_epoch_begin 方法

Tuner.on_epoch_begin(trial, model, epoch, logs=None)

在一个 epoch 开始时调用。

参数

  • trial: 一个 Trial 实例。
  • model: 一个 Keras Model
  • epoch: 当前的 epoch 编号。
  • logs: 其他指标。

[源代码]

on_batch_begin 方法

Tuner.on_batch_begin(trial, model, batch, logs)

在一个批次开始时调用。

参数

  • trial: 一个 Trial 实例。
  • model: 一个 Keras Model
  • batch: 当前 epoch 中的当前批次编号。
  • logs: 其他指标。

[源代码]

on_batch_end 方法

Tuner.on_batch_end(trial, model, batch, logs=None)

在一个批次结束时调用。

参数

  • trial: 一个 Trial 实例。
  • model: 一个 Keras Model
  • batch: 当前 epoch 中的当前批次编号。
  • logs: 其他指标。

[源代码]

on_epoch_end 方法

Tuner.on_epoch_end(trial, model, epoch, logs=None)

在一个 epoch 结束时调用。

参数

  • trial: 一个 Trial 实例。
  • model: 一个 Keras Model
  • epoch: 当前的 epoch 编号。
  • logs: 字典。此 epoch 的指标。应包含此 epoch 的目标值。

[源代码]

run_trial 方法

Tuner.run_trial(trial, )

评估一组超参数值。

search 期间多次调用此方法,以使用不同的超参数构建和评估模型并返回目标值。

示例

您可以将其与 self.hypermodel 一起使用来构建和拟合模型。

def run_trial(self, trial, *args, **kwargs):
    hp = trial.hyperparameters
    model = self.hypermodel.build(hp)
    return self.hypermodel.fit(hp, model, *args, **kwargs)

您也可以将其用作任何东西的黑盒优化器。

def run_trial(self, trial, *args, **kwargs):
    hp = trial.hyperparameters
    x = hp.Float("x", -2.0, 2.0)
    y = x * x + 2 * x + 1
    return y

参数

  • trial: 一个 Trial 实例,包含运行此试验所需的信息。可以通过 trial.hyperparameters 访问超参数。
  • *args: 由 search 传递的位置参数。
  • **kwargs: 由 search 传递的关键字参数。

返回值

一个 History 对象(即 model.fit() 的返回值)、一个字典、一个浮点数,或包含上述类型之一的列表。

如果返回一个字典,它应该是一个要跟踪的指标的字典。键是指标名称,其中包含 objective 名称。值应该是指标值。

如果返回一个浮点数,它应该是 objective 值。

如果多次评估模型,您可以返回包含上述任一类型结果的列表。最终目标值是列表中结果的平均值。


[源代码]

results_summary 方法

Tuner.results_summary(num_trials=10)

显示调优结果摘要。

该方法打印搜索结果摘要,包括每个试验的超参数值和评估结果。

参数

  • num_trials: 可选的要显示的试验数量。默认为 10。

[源代码]

save_model 方法

Tuner.save_model(trial_id, model, step=0)

为给定的试验保存模型。

参数

  • trial_id: 对应于此模型的 Trial 的 ID。
  • model: 训练好的模型。
  • step: 整数,对于向 Oracle 报告中间结果的模型,保存的文件对应的步骤。例如,对于 Keras 模型,这是训练的 epoch 数量。

[源代码]

search 方法

Tuner.search(*fit_args, **fit_kwargs)

执行搜索以找到最佳超参数配置。

参数

  • *fit_args: 应传递给 run_trial 的位置参数,例如训练数据和验证数据。
  • **fit_kwargs: 应传递给 run_trial 的关键字参数,例如训练数据和验证数据。

[源代码]

search_space_summary 方法

Tuner.search_space_summary(extended=False)

打印搜索空间摘要。

该方法打印搜索空间中超参数的摘要,可以在调用 search 方法之前调用。

参数

  • extended: 可选的布尔值,是否显示扩展摘要。默认为 False。

[源代码]

set_state 方法

Tuner.set_state(state)

设置此对象的当前状态。

此方法在 reload 期间调用。

参数

  • state: 一个字典,包含序列化对象作为要恢复的状态。