# 搜索空间 ## 概述 在 NNI 中,Tuner 会根据搜索空间来取样生成参数和网络架构。搜索空间通过 JSON 文件来定义。 要定义搜索空间,需要定义变量名称、采样策略的类型及其参数。 * 搜索空间示例如下: ```yaml { "dropout_rate": {"_type": "uniform", "_value": [0.1, 0.5]}, "conv_size": {"_type": "choice", "_value": [2, 3, 5, 7]}, "hidden_size": {"_type": "choice", "_value": [124, 512, 1024]}, "batch_size": {"_type": "choice", "_value": [50, 250, 500]}, "learning_rate": {"_type": "uniform", "_value": [0.0001, 0.1]} } ``` 将第一行作为示例。 `dropout_rate` 定义了一个变量,先验分布为均匀分布,范围从 `0.1` 到 `0.5`。 注意:搜索空间中可用的取样策略取决于要使用的 Tuner 。 此处列出了内置 Tuner 所支持的类型。 对于自定义的 Tuner,不必遵循这些约定,可使用任何的类型。 ## 类型 所有采样策略和参数如下: * `{"_type": "choice", "_value": options}` * 变量值为 options 中之一。 这里的 `options` 应该是字符串或数值的列表。 可将任意对象(如子数组,数字与字符串的混合值或者空值)存入此数组中,但可能会产生不可预料的行为。 * `options` 也可以是嵌套的子搜索空间。此子搜索空间仅在相应的元素选中后才起作用。 该子搜索空间中的变量可看作是条件变量。