Keras 3 API 文件 / 層 API / 層權重初始化器

層權重初始化器

初始化器的用法

初始化器定義了設定 Keras 層初始隨機權重的方式。

用於將初始化器傳遞給層的關鍵字參數取決於層。通常,它只是 kernel_initializerbias_initializer

from keras import layers
from keras import initializers

layer = layers.Dense(
    units=64,
    kernel_initializer=initializers.RandomNormal(stddev=0.01),
    bias_initializer=initializers.Zeros()
)

所有內建的初始化器也可以透過它們的字串識別符號傳遞

layer = layers.Dense(
    units=64,
    kernel_initializer='random_normal',
    bias_initializer='zeros'
)

可用的初始化器

以下內建的初始化器可作為 keras.initializers 模組的一部分

[來源]

RandomNormal 類別

keras.initializers.RandomNormal(mean=0.0, stddev=0.05, seed=None)

隨機常態初始化器。

從給定參數的常態分佈中繪製樣本。

範例

>>> # Standalone usage:
>>> initializer = RandomNormal(mean=0.0, stddev=1.0)
>>> values = initializer(shape=(2, 2))
>>> # Usage in a Keras layer:
>>> initializer = RandomNormal(mean=0.0, stddev=1.0)
>>> layer = Dense(3, kernel_initializer=initializer)

參數

  • mean: 一個 Python 純量或一個純量 Keras 張量。要產生的隨機值的平均值。
  • stddev: 一個 Python 純量或一個純量 Keras 張量。要產生的隨機值的標準差。
  • seed: 一個 Python 整數或 keras.backend.SeedGenerator 的實例。用於使初始化器的行為具有確定性。請注意,使用整數或 None(未播種)播種的初始化器將在多次呼叫中產生相同的隨機值。若要在多次呼叫中取得不同的隨機值,請使用 keras.backend.SeedGenerator 的實例作為種子。

[來源]

RandomUniform 類別

keras.initializers.RandomUniform(minval=-0.05, maxval=0.05, seed=None)

隨機均勻初始化器。

從給定參數的均勻分佈中繪製樣本。

範例

>>> # Standalone usage:
>>> initializer = RandomUniform(minval=0.0, maxval=1.0)
>>> values = initializer(shape=(2, 2))
>>> # Usage in a Keras layer:
>>> initializer = RandomUniform(minval=0.0, maxval=1.0)
>>> layer = Dense(3, kernel_initializer=initializer)

參數

  • minval: 一個 Python 純量或一個純量 Keras 張量。要產生的隨機值範圍的下限(包含)。
  • maxval: 一個 Python 純量或一個純量 Keras 張量。要產生的隨機值範圍的上限(不包含)。
  • seed: 一個 Python 整數或 keras.backend.SeedGenerator 的實例。用於使初始化器的行為具有確定性。請注意,使用整數或 None(未播種)播種的初始化器將在多次呼叫中產生相同的隨機值。若要在多次呼叫中取得不同的隨機值,請使用 keras.backend.SeedGenerator 的實例作為種子。

[來源]

TruncatedNormal 類別

keras.initializers.TruncatedNormal(mean=0.0, stddev=0.05, seed=None)

產生截斷常態分佈的初始化器。

產生值與 RandomNormal 初始化器的值相似,但與平均值相差超過兩個標準差的值將被捨棄並重新繪製。

範例

>>> # Standalone usage:
>>> initializer = TruncatedNormal(mean=0., stddev=1.)
>>> values = initializer(shape=(2, 2))
>>> # Usage in a Keras layer:
>>> initializer = TruncatedNormal(mean=0., stddev=1.)
>>> layer = Dense(3, kernel_initializer=initializer)

參數

  • mean: 一個 Python 純量或一個純量 Keras 張量。要產生的隨機值的平均值。
  • stddev: 一個 Python 純量或一個純量 Keras 張量。要產生的隨機值的標準差。
  • seed: 一個 Python 整數或 keras.backend.SeedGenerator 的實例。用於使初始化器的行為具有確定性。請注意,使用整數或 None(未播種)播種的初始化器將在多次呼叫中產生相同的隨機值。若要在多次呼叫中取得不同的隨機值,請使用 keras.backend.SeedGenerator 的實例作為種子。

[來源]

Zeros 類別

keras.initializers.Zeros()

產生初始化為 0 的張量的初始化器。

範例

>>> # Standalone usage:
>>> initializer = Zeros()
>>> values = initializer(shape=(2, 2))
>>> # Usage in a Keras layer:
>>> initializer = Zeros()
>>> layer = Dense(units=3, kernel_initializer=initializer)

[來源]

Ones 類別

keras.initializers.Ones()

產生初始化為 1 的張量的初始化器。

也可透過快捷函數 ones 取得。

範例

>>> # Standalone usage:
>>> initializer = Ones()
>>> values = initializer(shape=(2, 2))
>>> # Usage in a Keras layer:
>>> initializer = Ones()
>>> layer = Dense(3, kernel_initializer=initializer)

[來源]

GlorotNormal 類別

keras.initializers.GlorotNormal(seed=None)

Glorot 常態初始化器,也稱為 Xavier 常態初始化器。

從以 0 為中心的截斷常態分佈中繪製樣本,其中 stddev = sqrt(2 / (fan_in + fan_out)),其中 fan_in 是權重張量中的輸入單元數,而 fan_out 是權重張量中的輸出單元數。

範例

>>> # Standalone usage:
>>> initializer = GlorotNormal()
>>> values = initializer(shape=(2, 2))
>>> # Usage in a Keras layer:
>>> initializer = GlorotNormal()
>>> layer = Dense(3, kernel_initializer=initializer)

參數

  • seed: 一個 Python 整數或 keras.backend.SeedGenerator 的實例。用於使初始化器的行為具有確定性。請注意,使用整數或 None(未播種)播種的初始化器將在多次呼叫中產生相同的隨機值。若要在多次呼叫中取得不同的隨機值,請使用 keras.backend.SeedGenerator 的實例作為種子。

參考文獻


[來源]

GlorotUniform 類別

keras.initializers.GlorotUniform(seed=None)

Glorot 均勻初始化器,也稱為 Xavier 均勻初始化器。

[-limit, limit] 範圍內的均勻分佈中繪製樣本,其中 limit = sqrt(6 / (fan_in + fan_out)) (fan_in 是權重張量中的輸入單元數,而 fan_out 是輸出單元數)。

範例

>>> # Standalone usage:
>>> initializer = GlorotUniform()
>>> values = initializer(shape=(2, 2))
>>> # Usage in a Keras layer:
>>> initializer = GlorotUniform()
>>> layer = Dense(3, kernel_initializer=initializer)

參數

  • seed: 一個 Python 整數或 keras.backend.SeedGenerator 的實例。用於使初始化器的行為具有確定性。請注意,使用整數或 None(未播種)播種的初始化器將在多次呼叫中產生相同的隨機值。若要在多次呼叫中取得不同的隨機值,請使用 keras.backend.SeedGenerator 的實例作為種子。

參考文獻


[來源]

HeNormal 類別

keras.initializers.HeNormal(seed=None)

He 常態初始化器。

它從以 0 為中心的截斷常態分佈中繪製樣本,其中 stddev = sqrt(2 / fan_in),其中 fan_in 是權重張量中的輸入單元數。

範例

>>> # Standalone usage:
>>> initializer = HeNormal()
>>> values = initializer(shape=(2, 2))
>>> # Usage in a Keras layer:
>>> initializer = HeNormal()
>>> layer = Dense(3, kernel_initializer=initializer)

參數

  • seed: 一個 Python 整數或 keras.backend.SeedGenerator 的實例。用於使初始化器的行為具有確定性。請注意,使用整數或 None(未播種)播種的初始化器將在多次呼叫中產生相同的隨機值。若要在多次呼叫中取得不同的隨機值,請使用 keras.backend.SeedGenerator 的實例作為種子。

參考文獻


[來源]

HeUniform 類別

keras.initializers.HeUniform(seed=None)

He 均勻變異數縮放初始化器。

[-limit, limit] 範圍內的均勻分佈中繪製樣本,其中 limit = sqrt(6 / fan_in) (fan_in 是權重張量中的輸入單元數)。

範例

>>> # Standalone usage:
>>> initializer = HeUniform()
>>> values = initializer(shape=(2, 2))
>>> # Usage in a Keras layer:
>>> initializer = HeUniform()
>>> layer = Dense(3, kernel_initializer=initializer)

參數

  • seed: 一個 Python 整數或 keras.backend.SeedGenerator 的實例。用於使初始化器的行為具有確定性。請注意,使用整數或 None(未播種)播種的初始化器將在多次呼叫中產生相同的隨機值。若要在多次呼叫中取得不同的隨機值,請使用 keras.backend.SeedGenerator 的實例作為種子。

參考文獻


[來源]

Orthogonal 類別

keras.initializers.Orthogonal(gain=1.0, seed=None)

產生正交矩陣的初始化器。

如果要初始化的張量形狀為二維,則會使用從常態分佈中繪製的隨機數矩陣的 QR 分解獲得的正交矩陣進行初始化。如果矩陣的列數少於行數,則輸出將具有正交列。否則,輸出將具有正交行。

如果要初始化的張量形狀為多維,則會初始化形狀為 (shape[0] * ... * shape[n - 2], shape[n - 1]) 的矩陣,其中 n 是形狀向量的長度。隨後將矩陣重新塑形以得到所需形狀的張量。

範例

>>> # Standalone usage:
>>> initializer = keras.initializers.Orthogonal()
>>> values = initializer(shape=(2, 2))
>>> # Usage in a Keras layer:
>>> initializer = keras.initializers.Orthogonal()
>>> layer = keras.layers.Dense(3, kernel_initializer=initializer)

參數

  • gain: 套用於正交矩陣的乘法因子。
  • seed: 一個 Python 整數。用於使初始化器的行為具有確定性。

參考文獻


[來源]

Constant 類別

keras.initializers.Constant(value=0.0)

產生具有常數值的張量的初始化器。

僅允許使用純量值。提供的常數值必須可在呼叫初始化器時轉換為要求的 dtype。

範例

>>> # Standalone usage:
>>> initializer = Constant(10.)
>>> values = initializer(shape=(2, 2))
>>> # Usage in a Keras layer:
>>> initializer = Constant(10.)
>>> layer = Dense(3, kernel_initializer=initializer)

參數

  • value: 一個 Python 純量。

[來源]

VarianceScaling 類別

keras.initializers.VarianceScaling(
    scale=1.0, mode="fan_in", distribution="truncated_normal", seed=None
)

使其縮放比例適應其輸入張量形狀的初始化器。

使用 distribution="truncated_normal" 或 "untruncated_normal",樣本會從平均值為零且標準差(如果使用,則在截斷後)stddev = sqrt(scale / n) 的截斷/未截斷常態分佈中繪製,其中 n

  • 如果 mode="fan_in",則為權重張量中的輸入單元數
  • 如果 mode="fan_out",則為輸出單元數
  • 如果 mode="fan_avg",則為輸入和輸出單元數的平均值

使用 distribution="uniform",樣本會從 [-limit, limit] 範圍內的均勻分佈中繪製,其中 limit = sqrt(3 * scale / n)

範例

>>> # Standalone usage:
>>> initializer = VarianceScaling(
    scale=0.1, mode='fan_in', distribution='uniform')
>>> values = initializer(shape=(2, 2))
>>> # Usage in a Keras layer:
>>> initializer = VarianceScaling(
    scale=0.1, mode='fan_in', distribution='uniform')
>>> layer = Dense(3, kernel_initializer=initializer)

參數

  • scale: 縮放因子(正浮點數)。
  • mode: "fan_in""fan_out""fan_avg" 中的其中一個。
  • distribution: 要使用的隨機分佈。"truncated_normal""untruncated_normal""uniform" 中的其中一個。
  • seed: 一個 Python 整數或 keras.backend.SeedGenerator 的實例。用於使初始化器的行為具有確定性。請注意,使用整數或 None(未播種)播種的初始化器將在多次呼叫中產生相同的隨機值。若要在多次呼叫中取得不同的隨機值,請使用 keras.backend.SeedGenerator 的實例作為種子。

[來源]

LecunNormal 類別

keras.initializers.LecunNormal(seed=None)

Lecun 常態初始化器。

初始化器允許您預先指定初始化策略(在 Initializer 物件中編碼),而無需知道要初始化變數的形狀和 dtype。

從以 0 為中心的截斷常態分佈中繪製樣本,其中 stddev = sqrt(1 / fan_in),其中 fan_in 是權重張量中的輸入單元數。

範例

>>> # Standalone usage:
>>> initializer = LecunNormal()
>>> values = initializer(shape=(2, 2))
>>> # Usage in a Keras layer:
>>> initializer = LecunNormal()
>>> layer = Dense(3, kernel_initializer=initializer)

參數

  • seed: 一個 Python 整數或 keras.backend.SeedGenerator 的實例。用於使初始化器的行為具有確定性。請注意,使用整數或 None(未播種)播種的初始化器將在多次呼叫中產生相同的隨機值。若要在多次呼叫中取得不同的隨機值,請使用 keras.backend.SeedGenerator 的實例作為種子。

參考文獻


[來源]

LecunUniform 類別

keras.initializers.LecunUniform(seed=None)

Lecun 均勻初始化器。

[-limit, limit] 範圍內的均勻分佈中繪製樣本,其中 limit = sqrt(3 / fan_in) (fan_in 是權重張量中的輸入單元數)。

範例

>>> # Standalone usage:
>>> initializer = LecunUniform()
>>> values = initializer(shape=(2, 2))
>>> # Usage in a Keras layer:
>>> initializer = LecunUniform()
>>> layer = Dense(3, kernel_initializer=initializer)

參數

  • seed: 一個 Python 整數或 keras.backend.SeedGenerator 的實例。用於使初始化器的行為具有確定性。請注意,使用整數或 None(未播種)播種的初始化器將在多次呼叫中產生相同的隨機值。若要在多次呼叫中取得不同的隨機值,請使用 keras.backend.SeedGenerator 的實例作為種子。

參考文獻


[來源]

Identity 類別

keras.initializers.IdentityInitializer(gain=1.0)

產生單位矩陣的初始化器。

僅適用於產生 2D 矩陣。

範例

>>> # Standalone usage:
>>> initializer = Identity()
>>> values = initializer(shape=(2, 2))
>>> # Usage in a Keras layer:
>>> initializer = Identity()
>>> layer = Dense(3, kernel_initializer=initializer)

參數

  • gain: 套用於單位矩陣的乘法因子。

建立自訂初始化器

簡單的可呼叫物件

您可以傳遞自訂的可呼叫物件作為初始化器。它必須採用參數 shape(要初始化變數的形狀)和 dtype(產生值的 dtype)

def my_init(shape, dtype=None):
    return keras.random.normal(shape, dtype=dtype)

layer = Dense(64, kernel_initializer=my_init)

Initializer 子類別

如果您需要透過各種參數設定初始化器(例如 RandomNormal 中的 stddev 參數),則應將其實作為 keras.initializers.Initializer 的子類別。

初始化器應實作具有以下簽名的 __call__ 方法

def __call__(self, shape, dtype=None)`:
    # returns a tensor of shape `shape` and dtype `dtype`
    # containing values drawn from a distribution of your choice.

您可以選擇實作方法 get_config 和類別方法 from_config,以支援序列化 – 就像任何 Keras 物件一樣。

這是一個簡單的範例:隨機常態初始化器。

class ExampleRandomNormal(keras.initializers.Initializer):

    def __init__(self, mean, stddev):
      self.mean = mean
      self.stddev = stddev

    def __call__(self, shape, dtype=None)`:
      return keras.random.normal(
          shape, mean=self.mean, stddev=self.stddev, dtype=dtype)

    def get_config(self):  # To support serialization
      return {'mean': self.mean, 'stddev': self.stddev}

請注意,我們不必在上面的範例中實作 from_config,因為類別的建構函式引數與 get_config 傳回的設定中的鍵相同。在這種情況下,預設的 from_config 可以正常運作。