如前所述,Keras 層是 Keras 模型的主要構建塊。每一層接收輸入信息,做一些計算,最后輸出轉換后的信息。一層的輸出將作為輸入流入下一層。我們將在本章中了解有關圖層的完整詳細信息。
Keras 層需要輸入的形狀 (input_shape)來理解輸入數據的結構,初始化器為每個輸入設置權重,最后激活器來轉換輸出以使其非線性。在這兩者之間,約束限制并指定要生成的輸入數據的權重范圍,正則化器將通過在優(yōu)化過程中動態(tài)應用權重的懲罰來嘗試優(yōu)化層(和模型)。
總而言之,Keras 層需要低于最低限度的細節(jié)來創(chuàng)建一個完整的層。
讓我們在下一章中了解基本概念。在了解基本概念之前,讓我們使用 Sequential 模型 API 創(chuàng)建一個簡單的 Keras 層,以了解 Keras 模型和層的工作原理。
from keras.models import Sequential
from keras.layers import Activation, Dense
from keras import initializers
from keras import regularizers
from keras import constraints
model = Sequential()
model.add(Dense(32, input_shape=(16,), kernel_initializer = 'he_uniform',
kernel_regularizer = None, kernel_constraint = 'MaxNorm', activation = 'relu'))
model.add(Dense(16, activation = 'relu'))
model.add(Dense(8))
代碼詳解:
Sequential API
創(chuàng)建一個新模型。Input Shape, (16,)
。否則,上一層的輸出將用作下一層的輸入。所有其他參數都是可選的。
input_shape
表示輸入數據的形狀。kernel_initializer
表示要使用的初始化程序。he_uniform
函數被設置為值。kernel_regularizer
表示要使用的正則化
器。無設置為值。kernel_constraint
表示要使用的約束。MaxNorm
函數被設置為值。activation
表示要使用的激活。relu 函數被設置為值。讓我們了解層的基本概念以及 Keras 如何支持每個概念。
在機器學習中,所有類型的輸入數據,如文本、圖像或視頻,都將首先轉換為數字數組,然后輸入算法。輸入的數字可以是一維數組、二維數組(矩陣)或多維數組。我們可以使用shape
指定維度信息,這是一個整數元組。例如,(4,2)
表示四行兩列的矩陣。
>>> import numpy as np
>>> shape = (4, 2)
>>> input = np.zeros(shape)
>>> print(input)
[
[0. 0.]
[0. 0.]
[0. 0.]
[0. 0.]
]
>>>
類似地,(3,4,2)
三維矩陣具有三個 4x2 矩陣的集合(兩行四列)
>>> import numpy as np
>>> shape = (3, 4, 2)
>>> input = np.zeros(shape)
>>> print(input)
[
[[0. 0.] [0. 0.] [0. 0.] [0. 0.]]
[[0. 0.] [0. 0.] [0. 0.] [0. 0.]]
[[0. 0.] [0. 0.] [0. 0.] [0. 0.]]
]
>>>
要創(chuàng)建模型的第一層(或模型的輸入層),應指定輸入數據的形狀。
在機器學習中,權重將分配給所有輸入數據。Initializers 模塊提供了不同的函數來設置這些初始權重。一些 Keras Initializer 函數如下:
所有輸入數據生成0。
from keras.models import Sequential
from keras.layers import Activation, Dense
from keras import initializers
my_init = initializers.Zeros()
model = Sequential()
model.add(Dense(512, activation = 'relu', input_shape = (784,),
kernel_initializer = my_init))
其中,kernel_initializer
表示模型內核的初始化程序。
所有輸入數據生成1。
from keras.models import Sequential
from keras.layers import Activation, Dense
from keras import initializers
my_init = initializers.Ones()
model.add(Dense(512, activation = 'relu', input_shape = (784,),
kernel_initializer = my_init))
所有輸入數據生成用戶指定的常量值(例如5)。
from keras.models import Sequential
from keras.layers import Activation, Dense
from keras import initializers
my_init = initializers.Constant(value = 0) model.add(
Dense(512, activation = 'relu', input_shape = (784,), kernel_initializer = my_init)
)
其中,value
表示常數值
使用輸入數據的正態(tài)分布生成值。
from keras.models import Sequential
from keras.layers import Activation, Dense
from keras import initializers
my_init = initializers.RandomNormal(mean=0.0,
stddev = 0.05, seed = None)
model.add(Dense(512, activation = 'relu', input_shape = (784,),
kernel_initializer = my_init))
mean
表示要生成的隨機值的平均值stddev
表示要生成的隨機值的標準偏差seed
代表生成隨機數的值使用輸入數據的均勻分布生成值。
from keras import initializers
my_init = initializers.RandomUniform(minval = -0.05, maxval = 0.05, seed = None)
model.add(Dense(512, activation = 'relu', input_shape = (784,),
kernel_initializer = my_init))
minval
表示要生成的隨機值的下限maxval
表示要生成的隨機值的上限使用輸入數據的截斷正態(tài)分布生成值。
from keras.models import Sequential
from keras.layers import Activation, Dense
from keras import initializers
my_init = initializers.TruncatedNormal(mean = 0.0, stddev = 0.05, seed = None
model.add(Dense(512, activation = 'relu', input_shape = (784,),
kernel_initializer = my_init))
根據圖層的輸入形狀和輸出形狀以及指定的比例生成值。
from keras.models import Sequential
from keras.layers import Activation, Dense
from keras import initializers
my_init = initializers.VarianceScaling(
scale = 1.0, mode = 'fan_in', distribution = 'normal', seed = None)
model.add(Dense(512, activation = 'relu', input_shape = (784,),
skernel_initializer = my_init))
scale
表示縮放因子mode
表示fan_in
、fan_out
和fan_avg
值中的任何一個distribution
代表正態(tài)或均勻
它使用以下公式找到正態(tài)分布的stddev
值,然后使用正態(tài)分布找到權重,
stddev = sqrt(scale / n)
其中n
代表,
mode = fan_in
的輸入單元數mode = fan_out
的輸出單元數mode = fan_avg
的平均輸入和輸出單元數類似地,它使用以下公式找到均勻分布的極限,然后使用均勻分布找到權重,
limit = sqrt(3 * scale / n)
使用輸入數據的 lecun 正態(tài)分布生成值。
from keras.models import Sequential
from keras.layers import Activation, Dense
from keras import initializers
my_init = initializers.RandomUniform(minval = -0.05, maxval = 0.05, seed = None)
model.add(Dense(512, activation = 'relu', input_shape = (784,),
kernel_initializer = my_init))
它使用以下公式找到stddev
,然后應用正態(tài)分布
stddev = sqrt(1 / fan_in)
其中,fan_in
表示輸入單元的數量。
使用輸入數據的 lecun 均勻分布生成值。
from keras.models import Sequential
from keras.layers import Activation, Dense
from keras import initializers
my_init = initializers.lecun_uniform(seed = None)
model.add(Dense(512, activation = 'relu', input_shape = (784,),
kernel_initializer = my_init))
它使用以下公式找到極限,然后應用均勻分布
limit = sqrt(3 / fan_in)
fan_in
表示輸入單元的數量fan_out
表示輸出單元的數量使用輸入數據的 glorot 正態(tài)分布生成值。
from keras.models import Sequential
from keras.layers import Activation, Dense
from keras import initializers
my_init = initializers.glorot_normal(seed=None) model.add(
Dense(512, activation = 'relu', input_shape = (784,), kernel_initializer = my_init)
)
它使用以下公式找到 stddev,然后應用正態(tài)分布
stddev = sqrt(2 / (fan_in + fan_out))
fan_in
表示輸入單元的數量fan_out
表示輸出單元的數量使用輸入數據的 glorot 均勻分布生成值。
from keras.models import Sequential
from keras.layers import Activation, Dense
from keras import initializers
my_init = initializers.glorot_uniform(seed = None)
model.add(Dense(512, activation = 'relu', input_shape = (784,),
kernel_initializer = my_init))
它使用以下公式找到極限
,然后應用均勻分布
limit = sqrt(6 / (fan_in + fan_out))
fan_in
表示輸入單元的數量。fan_out
表示輸出單元的數量使用輸入數據的正態(tài)分布生成值。
from keras.models import Sequential
from keras.layers import Activation, Dense
from keras import initializers
my_init = initializers.RandomUniform(minval = -0.05, maxval = 0.05, seed = None)
model.add(Dense(512, activation = 'relu', input_shape = (784,),
kernel_initializer = my_init))
它使用以下公式找到stddev
,然后應用正態(tài)分布。
stddev = sqrt(2 / fan_in)
其中,fan_in
表示輸入單元的數量。
使用輸入數據的均勻分布生成值。
from keras.models import Sequential
from keras.layers import Activation, Dense
from keras import initializers
my_init = initializers.he_normal(seed = None)
model.add(Dense(512, activation = 'relu', input_shape = (784,),
kernel_initializer = my_init))
它使用以下公式找到limit
,然后應用均勻分布。
limit = sqrt(6 / fan_in)
其中,fan_in
表示輸入單元的數量。
生成隨機正交矩陣。
from keras.models import Sequential
from keras.layers import Activation, Dense
from keras import initializers
my_init = initializers.Orthogonal(gain = 1.0, seed = None)
model.add(Dense(512, activation = 'relu', input_shape = (784,),
kernel_initializer = my_init))
其中,gain
表示矩陣的乘法因子。
生成單位矩陣。
from keras.models import Sequential
from keras.layers import Activation, Dense
from keras import initializers
my_init = initializers.Identity(gain = 1.0) model.add(
Dense(512, activation = 'relu', input_shape = (784,), kernel_initializer = my_init)
)
在機器學習中,將在優(yōu)化階段對參數(權重)設置約束。<>Constraints 模塊提供了不同的功能來設置層上的約束。一些約束函數如下。
將權重限制為非負。
from keras.constraints import non_neg
其中,kernel_constraint
表示要在層中使用的約束。
將權重約束為單位范數。
from keras.models import Sequential
from keras.layers import Activation, Dense
from keras import constraints
my_constrain = constraints.UnitNorm(axis = 0)
model = Sequential()
model.add(Dense(512, activation = 'relu', input_shape = (784,),
kernel_constraint = my_constrain))
將權重限制為小于或等于給定值的范數。
from keras.models import Sequential
from keras.layers import Activation, Dense
from keras import constraints
my_constrain = constraints.MaxNorm(max_value = 2, axis = 0)
model = Sequential()
model.add(Dense(512, activation = 'relu', input_shape = (784,),
kernel_constraint = my_constrain))
max_value
表示上限將權重約束為指定的最小值和最大值之間的范數。
from keras.models import Sequential
from keras.layers import Activation, Dense
from keras import constraints
my_constrain = constraints.MinMaxNorm(min_value = 0.0, max_value = 1.0, rate = 1.0, axis = 0)
model = Sequential()
model.add(Dense(512, activation = 'relu', input_shape = (784,),
kernel_constraint = my_constrain))
其中,rate
表示應用權重約束的速率。
在機器學習中,正則化器用于優(yōu)化階段。它在優(yōu)化過程中對層參數應用一些懲罰。Keras 正則化模塊提供以下函數來設置層的懲罰。正則化僅適用于每層基礎。
它提供基于 L1 的正則化
from keras.models import Sequential
from keras.layers import Activation, Dense
from keras import regularizers
my_regularizer = regularizers.l1(0.)
model = Sequential()
model.add(Dense(512, activation = 'relu', input_shape = (784,),
kernel_regularizer = my_regularizer))
其中,kernel_regularizer
表示應用權重約束的速率。
它提供基于 L2 的正則化
from keras.models import Sequential
from keras.layers import Activation, Dense
from keras import regularizers
my_regularizer = regularizers.l2(0.)
model = Sequential()
model.add(Dense(512, activation = 'relu', input_shape = (784,),
kernel_regularizer = my_regularizer))
它提供基于 L1 和 L2 的正則化。
from keras.models import Sequential
from keras.layers import Activation, Dense
from keras import regularizers
my_regularizer = regularizers.l2(0.)
model = Sequential()
model.add(Dense(512, activation = 'relu', input_shape = (784,),
kernel_regularizer = my_regularizer))
在機器學習中,激活函數是一種特殊的函數,用于發(fā)現特定神經元是否被激活?;旧希せ詈瘮祵斎霐祿M行非線性變換,從而使神經元能夠更好地學習。神經元的輸出取決于激活函數。
當您回憶起單一感知的概念時,感知器(神經元)的輸出只是激活函數的結果,它接受所有輸入乘以其相應的權重加上總體偏差(如果有的話)的總和。
result = Activation(SUMOF(input * weight) + bias)
因此,激活函數在模型的成功學習中起著重要作用。Keras 在 activations 模塊中提供了很多激活函數。讓我們學習模塊中可用的所有激活。
應用線性函數。什么也沒做。
from keras.models import Sequential
from keras.layers import Activation, Dense
model = Sequential()
model.add(Dense(512, activation = 'linear', input_shape = (784,)))
其中,激活是指層的激活函數??梢院唵蔚赝ㄟ^函數名稱指定,層將使用相應的激活器。
應用指數線性單位
from keras.models import Sequential
from keras.layers import Activation, Dense
model = Sequential()
model.add(Dense(512, activation = 'elu', input_shape = (784,)))
應用縮放指數線性單位。
from keras.models import Sequential
from keras.layers import Activation, Dense
model = Sequential()
model.add(Dense(512, activation = 'selu', input_shape = (784,)))
應用整流線性單元。
from keras.models import Sequential
from keras.layers import Activation, Dense
model = Sequential()
model.add(Dense(512, activation = 'relu', input_shape = (784,)))
應用 Softmax 函數。
from keras.models import Sequential
from keras.layers import Activation, Dense
model = Sequential()
model.add(Dense(512, activation = 'softmax', input_shape = (784,)))
應用Softplus功能。
from keras.models import Sequential
from keras.layers import Activation, Dense
model = Sequential()
model.add(Dense(512, activation = 'softplus', input_shape = (784,)))
應用softsign功能。
from keras.models import Sequential
from keras.layers import Activation, Dense
model = Sequential()
model.add(Dense(512, activation = 'softsign', input_shape = (784,)))
應用 Sigmoid 函數。
from keras.models import Sequential
from keras.layers import Activation, Dense
model = Sequential()
model.add(Dense(512, activation = 'sigmoid', input_shape = (784,)))
應用 hard_sigmoid 函數。
from keras.models import Sequential
from keras.layers import Activation, Dense
model = Sequential()
model.add(Dense(512, activation = 'hard_sigmoid', input_shape = (784,)))
應用指數函數。
from keras.models import Sequential
from keras.layers import Activation, Dense
model = Sequential()
model.add(Dense(512, activation = 'exponential', input_shape = (784,)))
更多建議: