# 搜索空间 ## 概述 在 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` 也可以是嵌套的子搜索空间。此子搜索空间仅在相应的元素选中后才起作用。 该子搜索空间中的变量可看作是条件变量。