在神經網絡訓練中,好的權重 初始化會加速訓練過程。
下面說一下kernel_initializer 權重初始化的方法。
不同的層可能使用不同的關鍵字來傳遞初始化方法,一般來說指定初始化方法的關鍵字是kernel_initializer 和 bias_initializer
model.add(Dense(64, kernel_initializer=initializers.random_normal(stddev=0.01))) # also works; will use the default parameters. model.add(Dense(64, kernel_initializer='random_normal'))
幾種初始化方法
keras.initializers.Zeros()#全0 keras.initializers.Ones()#全1 keras.initializers.RandomNormal(mean=0.0, stddev=0.05, seed=None))#指定均值和方差的正態分佈初始化 keras.initializers.RandomUniform(minval=-0.05, maxval=0.05, seed=None)#指定下邊界和上邊界的均勻分佈初始化 keras.initializers.TruncatedNormal(mean=0.0, stddev=0.05, seed=None)#截尾高斯分佈初始化,位於均值兩個標準差以外的數據將會被丟棄並重新生成,形成截尾分佈
自定義初始化
def my_init(shape, dtype=None): return K.random_normal(shape, dtype=dtype) model.add(Dense(64, init=my_init))
補充知識:Keras中權重weight的初始化
Keras 的原始構造模塊是模型,最簡單的模型稱為序貫模型, Keras 的序貫模型是神經網絡層的線性管道 ( 堆棧) 。
以下代碼段定義了 一個包含 12 個人工神經元的單層 網絡,它預計有 8 個輸入變量 ( 也稱為特徵):
from keras.models import Sequential model =Sequential() model.add(12,input_dim=8,kernel_initializer='random_uniform')
每個神經元可以用特定的權重進行初始化 。 Keras 提供了 幾個選擇 , 其中最常用的選擇如下所示。
random_unifrom:權重被初始化為(-0.5,0.5)之間的均勻隨機的微小數值,換句話說,給定區間裡的任何值都可能作為權重 。
random_normal:根據高斯分佈初始化權重,其中均值為0,標準差為0.05。
zero:所有權重被初始化為0。
[bom485332 ] keras之權重初始化方式已經有213次圍觀