日志记录#
日志记录是优化的关键部分,用户应该能够对其进行自定义。本页概述了如何使用 SMAC 自定义日志记录体验。
级别#
改变日志记录行为最简单的方法是改变全局日志记录器的级别。如果您在任何 facade 中指定了 logging_level
,SMAC 会为您完成此操作。
下表显示了具体的级别
名称 | 级别 |
---|---|
0 | 显示全部 |
10 | 调试 |
20 | 信息 |
30 | 警告 |
40 | 错误 |
50 | 严重 |
标准日志文件#
默认情况下,SMAC 会生成几个文件来记录优化过程。这些文件存储在目录结构 ./output_directory/name/seed
中,如果未明确提供名称,则名称将被替换为哈希值。此行为可以通过 场景 (Scenario) 配置进行自定义,如下例所示
Scenario(
configspace = some_configspace,
name = 'experiment_name',
output_directory = Path('some_directory'),
...
)
./some_directory/experiment_name/seed
已存在,其行为由 外观模式 (facade) 设置中的 overwrite 参数决定。此参数指定是继续之前的运行(默认)还是开始新的运行。
输出分为四个不同的日志文件,以及所使用的 ConfigSpace 库的配置空间 的副本。
intensifier.json#
强化 (intensification) 记录在 intensifier.json
中,结构如下:
{
"incumbent_ids": [
65
],
"rejected_config_ids": [
1,
],
"incumbents_changed": 2,
"trajectory": [
{
"config_ids": [
1
],
"costs": [
0.45706284046173096
],
"trial": 1,
"walltime": 0.029736042022705078
},
#...
],
"state": {
"tracker": {},
"next_bracket": 0
}
}
optimization.json#
优化过程在 optimization.json
中描述,结构如下:
{
"used_walltime": 184.87366724014282,
"used_target_function_walltime": 20.229533672332764,
"last_update": 1732703596.5609574,
"finished": false
}
runhistory.json#
runhistory.json 分为四个部分:stats
、data
、configs
和 config_origins
。stats
包含关于不同评估配置的总体广泛统计信息
data
包含条目列表,每个条目对应一个配置。
"data": [
{
"config_id": 1,
"instance": null,
"seed": 209652396,
"budget": 2.7777777777777777,
"cost": 2147483647.0,
"time": 0.0,
"cpu_time": 0.0,
"status": 0,
"starttime": 0.0,
"endtime": 0.0,
"additional_info": {}
},
...
]
configs
是一个人类可读的配置字典,其中键是基于一的 config_id
。需要注意的是,在 runhistory.json
中,索引是基于零的。
最后,config_origins
指定配置的来源,指示它来自初始设计还是采集函数最大化的结果。
scenario.json#
´scenario.json´ 文件包含记录到 json 文件中的 场景 (Scenario) 的总体状态。
自定义文件#
有时,用户希望禁用或突出显示指定模块。您可以通过向 facade 传递一个自定义 yaml 文件来做到这一点。
以下文件展示了如何仅显示来自强化器的错误消息,同时将其他所有内容的级别保持为 INFO
version: 1
disable_existing_loggers: false
formatters:
simple:
format: '[%(levelname)s][%(filename)s:%(lineno)d] %(message)s'
handlers:
console:
class: logging.StreamHandler
level: INFO
formatter: simple
stream: ext://sys.stdout
loggers:
smac.intensifier:
level: ERROR
handlers: [console]
root:
level: INFO
handlers: [console]