初始化器定義了設定 Keras 層初始隨機權重的方式。
用於將初始化器傳遞到層的關鍵字參數取決於層。通常,它只是 kernel_initializer
和 bias_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)
參數
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)
參數
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)
參數
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)
參數
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)
參數
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)
參數
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)
參數
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)
參數
參考文獻
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)
參數
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)
參數
"fan_in"
、"fan_out"
、"fan_avg"
。"truncated_normal"
、"untruncated_normal"
或 "uniform"
。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)
參數
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)
參數
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)
參數
您可以傳遞自訂的可調用物件作為初始化器。它必須接受參數 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
可以正常運作。