Keras 3 API 文件 / KerasTuner / 超參數

超參數 (HyperParameters)

[來源]

HyperParameters 類別

keras_tuner.HyperParameters()

用於存放超參數空間和當前值的容器。

可以將 HyperParameters 的實例作為參數傳遞給 HyperModel.build(hp) 來建構模型。

為了防止使用者依賴於非啟用狀態的超參數值,只有啟用狀態的超參數才應該在 HyperParameters.values 中具有值。

屬性

  • space:一個包含 HyperParameter 物件的列表。
  • values:一個字典,將超參數名稱映射到當前值。

[來源]

Boolean 方法

HyperParameters.Boolean(name, default=False, parent_name=None, parent_values=None)

在 True 和 False 之間進行選擇。

參數

  • name:字串,參數的名稱。在搜尋空間中,每個 HyperParameter 實例的名稱必須是唯一的。
  • default:布林值,要為參數返回的預設值。如果未指定,則預設值為 False。
  • parent_name:可選的字串,指定要作為啟用當前 HyperParameter 的條件的父 HyperParameter 的名稱。
  • parent_values:可選的列表,包含要作為啟用當前 HyperParameter 的條件的父 HyperParameter 的值。

返回值

超參數的值,如果超參數未啟用,則返回 None。


[來源]

Choice 方法

HyperParameters.Choice(
    name, values, ordered=None, default=None, parent_name=None, parent_values=None
)

從一組預定義的可能值中選擇一個值。

參數

  • name:字串,參數的名稱。在搜尋空間中,每個 HyperParameter 實例的名稱必須是唯一的。
  • values:一個包含可能值的列表。值必須是整數、浮點數、字串或布林值。所有值必須屬於同一種類型。
  • ordered:可選的布林值,表示傳遞的值是否應該被視為具有順序。對於浮點數/整數值,預設值為 True。對於任何其他值,必須為 False
  • default:可選的預設值,要為參數返回。如果未指定,則預設值為
    • 如果 None 是 values 中的選項之一,則為 None
    • 否則為 values 中的第一個條目。
  • parent_name:可選的字串,指定要作為啟用當前 HyperParameter 的條件的父 HyperParameter 的名稱。
  • parent_values:可選的列表,包含要作為啟用當前 HyperParameter 的條件的父 HyperParameter 的值。

返回值

超參數的值,如果超參數未啟用,則返回 None。


[來源]

Fixed 方法

HyperParameters.Fixed(name, value, parent_name=None, parent_values=None)

固定、不可調整的值。

參數

  • name:字串,參數的名稱。在搜尋空間中,每個 HyperParameter 實例的名稱必須是唯一的。
  • value:要使用的值(可以是任何可 JSON 序列化的 Python 類型)。
  • parent_name:可選的字串,指定要作為啟用當前 HyperParameter 的條件的父 HyperParameter 的名稱。
  • parent_values:可選的列表,包含要作為啟用當前 HyperParameter 的條件的父 HyperParameter 的值。

返回值

超參數的值,如果超參數未啟用,則返回 None。


[來源]

Float 方法

HyperParameters.Float(
    name,
    min_value,
    max_value,
    step=None,
    sampling="linear",
    default=None,
    parent_name=None,
    parent_values=None,
)

浮點數值超參數。

範例 #1

hp.Float(
    "image_rotation_factor",
    min_value=0,
    max_value=1)

區間 [0, 1] 中的所有值都有相同的取樣機率。

範例 #2

hp.Float(
    "image_rotation_factor",
    min_value=0,
    max_value=1,
    step=0.2)

step 是樣本之間的最小距離。 可能的值為 [0, 0.2, 0.4, 0.6, 0.8, 1.0]。

範例 #3

hp.Float(
    "learning_rate",
    min_value=0.001,
    max_value=10,
    step=10,
    sampling="log")

sampling="log" 時,step 會在樣本之間相乘。 可能的值為 [0.001, 0.01, 0.1, 1, 10]。

參數

  • name:字串,參數的名稱。在搜尋空間中,每個 HyperParameter 實例的名稱必須是唯一的。
  • min_value:浮點數,範圍的下限。
  • max_value:浮點數,範圍的上限。
  • step:可選的浮點數,範圍中兩個連續樣本之間的距離。 如果未指定,則可以在區間內對任何值進行取樣。 如果 sampling="linear",則它將是兩個樣本之間的最小加數。 如果 sampling="log",則它將是兩個樣本之間的最小乘數。
  • sampling:字串。 其中一個為「linear」、「log」、「reverse_log」。 預設值為「linear」。 對值進行取樣時,它始終從 [0.0, 1.0) 範圍內的值開始。 sampling 參數決定值如何投影到 [min_value, max_value] 的範圍內。 「linear」:min_value + value * (max_value - min_value) 「log」:min_value * (max_value / min_value) ^ value 「reverse_log」:(max_value - min_value * ((max_value / min_value) ^ (1 - value) - 1))
  • default:浮點數,要返回參數的預設值。 如果未指定,則預設值將為 min_value
  • parent_name:可選的字串,指定要作為啟用當前 HyperParameter 的條件的父 HyperParameter 的名稱。
  • parent_values:可選的列表,包含要作為啟用當前 HyperParameter 的條件的父 HyperParameter 的值。

返回值

超參數的值,如果超參數未啟用,則返回 None。


[來源]

Int 方法

HyperParameters.Int(
    name,
    min_value,
    max_value,
    step=None,
    sampling="linear",
    default=None,
    parent_name=None,
    parent_values=None,
)

整數超參數。

請注意,與 Python 的 range 函數不同,max_value 包含在此參數可以採用的可能值中。

範例 #1

hp.Int(
    "n_layers",
    min_value=6,
    max_value=12)

可能的值為 [6, 7, 8, 9, 10, 11, 12]。

範例 #2

hp.Int(
    "n_layers",
    min_value=6,
    max_value=13,
    step=3)

step 是樣本之間的最小距離。 可能的值為 [6, 9, 12]。

範例 #3

hp.Int(
    "batch_size",
    min_value=2,
    max_value=32,
    step=2,
    sampling="log")

sampling="log" 時,step 會在樣本之間相乘。 可能的值為 [2, 4, 8, 16, 32]。

參數

  • name:字串,參數的名稱。在搜尋空間中,每個 HyperParameter 實例的名稱必須是唯一的。
  • min_value:整數,範圍的下限(含)。
  • max_value:整數,範圍的上限(含)。
  • step:可選的整數,範圍中兩個連續樣本之間的距離。 如果未指定,則可以在區間內對任何整數進行取樣。 如果 sampling="linear",則它將是兩個樣本之間的最小加數。 如果 sampling="log",則它將是兩個樣本之間的最小乘數。
  • sampling:字串。 其中一個為「linear」、「log」、「reverse_log」。 預設值為「linear」。 對值進行取樣時,它始終從 [0.0, 1.0) 範圍內的值開始。 sampling 參數決定值如何投影到 [min_value, max_value] 的範圍內。 「linear」:min_value + value * (max_value - min_value) 「log」:min_value * (max_value / min_value) ^ value 「reverse_log」:(max_value - min_value * ((max_value / min_value) ^ (1 - value) - 1))
  • default:整數,要返回參數的預設值。 如果未指定,則預設值將為 min_value
  • parent_name:可選的字串,指定要作為啟用當前 HyperParameter 的條件的父 HyperParameter 的名稱。
  • parent_values:可選的列表,包含要作為啟用當前 HyperParameter 的條件的父 HyperParameter 的值。

返回值

超參數的值,如果超參數未啟用,則返回 None。


[來源]

conditional_scope 方法

HyperParameters.conditional_scope(parent_name, parent_values)

開啟一個範圍以建立條件式超參數。

僅當 parent_name 指定的父 HyperParameter 等於傳遞至 parent_values 的值之一時,在此範圍下建立的所有 HyperParameter 才會處於作用中狀態。

如果條件不滿足,則在此範圍下建立 HyperParameter 將會註冊 HyperParameter,但會返回 None 而不是具體值。

請注意,無論條件是否滿足,此範圍下的任何 Python 代碼都將執行。

此功能用於 Tuner 以收集更多關於搜尋空間和當前試驗的資訊。 它對於模型選擇特別有用。 如果父 HyperParameter 用於模型選擇,則模型中的 HyperParameter 應僅在選取模型時處於作用中狀態,這可以使用 conditional_scope 來實現。

範例

def MyHyperModel(HyperModel):
    def build(self, hp):
        model = Sequential()
        model.add(Input(shape=(32, 32, 3)))
        model_type = hp.Choice("model_type", ["mlp", "cnn"])
        with hp.conditional_scope("model_type", ["mlp"]):
            if model_type == "mlp":
                model.add(Flatten())
                model.add(Dense(32, activation='relu'))
        with hp.conditional_scope("model_type", ["cnn"]):
            if model_type == "cnn":
                model.add(Conv2D(64, 3, activation='relu'))
                model.add(GlobalAveragePooling2D())
        model.add(Dense(10, activation='softmax'))
        return model

參數

  • parent_name:一個字串,指定要作為啟動當前 HyperParameter 的條件的父 HyperParameter 的名稱。
  • parent_values:要作為啟動當前 HyperParameter 的條件的父 HyperParameter 值的清單。

[來源]

get 方法

HyperParameters.get(name)

返回此超參數集的當前值。