高级示例

在 MNIST 上优化小型卷积神经网络

在此示例中,我们将涵盖以下功能

前两部分在示例 5 中介绍,而可视化部分则在示例 6示例 7 中展示。

1) 更真实的搜索空间

到目前为止,快速入门示例中的搜索空间只包含一个连续变量。当然,有趣的问题需要搜索更复杂的空间。挑战包括

  1. 更高的维度
  2. 不仅有连续参数,还有整数值和分类选择
  3. 参数之间的依赖性/条件性

MNIST 示例 的工作器具有相当复杂的搜索空间,涵盖了上述挑战。请查看 KerasPyTorch 示例,了解搜索空间及其编码方式。

2) 实时日志记录

到目前为止,运行结果只能在完成后才能获取。对于非常耗时且昂贵的运行,您可能希望在优化仍在进行时检查进度。为此,HpBandSter 包含一个我们称之为**实时日志记录**的功能。其思想很简单,就是向磁盘写入足够的信息,以便可以像分析已完成的运行一样分析中间结果。存储功能由 结果记录器 实现,它在指定目录中存储两个 JSON 文件。加载该信息的功能在 此函数 中实现。

要存储信息,只需创建一个 结果记录器 并将其传递给优化器。示例 中的相关代码行如下:

import hpbandster.core.result as hpres
result_logger = hpres.json_result_logger(directory=args.shared_directory, overwrite=False)
bohb = BOHB(  configspace = worker.get_configspace(),
			  run_id = args.run_id,
			  host=host,
			  nameserver=ns_host,
			  nameserver_port=ns_port,
			  result_logger=result_logger,
			  min_budget=args.min_budget, max_budget=args.max_budget, 
		   )

请查看 示例 了解如何加载这些结果。

3) 可视化

HpBandSter 包含一些工具,用于可视化优化运行的结果。静态图的示例可在 示例 6 中找到。所展示的数量使您能够查看在哪些预算下评估了多少配置,优化期间并行运行了多少次,以及损失在不同预算下如何关联。

示例 7 中还展示了一个小型交互式绘图工具。它通过绘制各种迭代并允许显示所选配置的更多信息,从而更好地探索运行性能。它不是最复杂的工具,但也许有助于在结果中发现规律。

继续运行或热启动优化

在某些情况下,您可能希望继续一次运行,或重新利用旧的评估结果进行稍微修改后的目标优化。这些情况包括但不限于

  • 由于某些硬件问题(计算机崩溃),运行意外终止。
  • 分析显示优化仍在改进,这意味着运行时间太短了。
  • 运行中使用的最大预算不足以达到期望的性能。
  • 已完成的运行可能只是在数据子集上进行的初步运行,以加快实验速度。获得的这些结果仍然是完整数据集的良好代理。

示例 8 中,我们展示了如何加载 旧运行 的结果并为新运行初始化模型。具体来说,我们在 MNIST 上优化相同的 CNN 架构,但使用更多数据点进行训练。我们还提高了最小预算,因为我们预计在一个 epoch 后不会再从评估中获得更多收益。

注意

虽然问题的某些具体细节可能会改变,但重要的是要认识到,这仅在搜索空间完全相同且旧目标仍然是新目标的非常好的近似值时才有效!使用此功能继续使用相同的工作器、设置和预算,将无法恢复在写入 JSON 文件时尚未完成的运行。此外,迭代将再次从零开始计数,这意味着它可能使用的预算与前一次运行的下一次迭代会使用的预算不同。