初始化器定義了設定 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)
產生單位矩陣的初始化器。
僅適用於產生 2D 矩陣。
範例
>>> # 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
可以正常運作。