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)

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

僅適用於生成二維矩陣。

範例

>>> # 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 可以正常運作。