
- Keras 教程
- Keras - 首頁
- Keras - 簡介
- Keras - 安裝
- Keras - 後端配置
- Keras - 深度學習概述
- Keras - 深度學習
- Keras - 模組
- Keras - 層
- Keras - 自定義層
- Keras - 模型
- Keras - 模型編譯
- Keras - 模型評估和預測
- Keras - 卷積神經網路
- Keras - 使用 MPL 進行迴歸預測
- Keras - 使用 LSTM RNN 進行時間序列預測
- Keras - 應用
- Keras - 使用 ResNet 模型進行即時預測
- Keras - 預訓練模型
- Keras 有用資源
- Keras - 快速指南
- Keras - 有用資源
- Keras - 討論
Keras - 層
如前所述,Keras 層是 Keras 模型的主要構建塊。每個層接收輸入資訊,進行一些計算,最後輸出轉換後的資訊。一層輸出將作為下一層的輸入流入。讓我們在本節中學習關於層的完整細節。
介紹
Keras 層需要輸入的形狀 (input_shape) 來理解輸入資料的結構,初始化器 來為每個輸入設定權重,最後使用啟用函式來轉換輸出使其非線性。在此期間,約束限制並指定生成輸入資料權重的範圍,正則化器將透過在最佳化過程中動態地對權重應用懲罰來嘗試最佳化層(和模型)。
總而言之,Keras 層需要以下最少細節來建立一個完整的層。
- 輸入資料的形狀
- 層中神經元/單元的數量
- 初始化器
- 正則化器
- 約束
- 啟用函式
讓我們在下一章瞭解基本概念。在瞭解基本概念之前,讓我們使用 Sequential 模型 API 建立一個簡單的 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))
其中,
第 1-5 行 匯入必要的模組。
第 7 行 使用 Sequential API 建立一個新模型。
第 9 行 建立一個新的Dense 層並將其新增到模型中。Dense 是 Keras 提供的入門級層,它接受神經元或單元的數量 (32) 作為其必需引數。如果該層是第一層,則也需要提供Input Shape, (16,)。否則,前一層的輸出將用作下一層的輸入。所有其他引數都是可選的。
第一個引數表示單元(神經元)的數量。
input_shape 表示輸入資料的形狀。
kernel_initializer 表示要使用的初始化器。he_uniform 函式被設定為值。
kernel_regularizer 表示要使用的正則化器。None 被設定為值。
kernel_constraint 表示要使用的約束。MaxNorm 函式被設定為值。
activation 表示要使用的啟用函式。relu 函式被設定為值。
第 10 行 建立第二個具有 16 個單元的Dense 層,並將relu 設定為啟用函式。
第 11 行 建立具有 8 個單元的最終 Dense 層。
層的基本概念
讓我們瞭解層的基本概念以及 Keras 如何支援每個概念。
輸入形狀
在機器學習中,所有型別的輸入資料(如文字、影像或影片)將首先轉換為數字陣列,然後饋送到演算法中。輸入數字可以是一維陣列、二維陣列(矩陣)或多維陣列。我們可以使用形狀(一個整數元組)來指定維度資訊。例如,(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.]] ] >>>
要建立模型的第一層(或模型的輸入層),應指定輸入資料的形狀。
初始化器
在機器學習中,將為所有輸入資料分配權重。初始化器 模組提供不同的函式來設定這些初始權重。一些Keras 初始化器 函式如下所示:
零
為所有輸入資料生成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 表示常數值
隨機正態分佈
使用輸入資料的正態分佈生成值。
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 表示要生成的隨機值的較高邊界
截斷正態分佈
使用輸入資料的截斷正態分佈生成值。
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 表示normal 或uniform 中的任何一個
方差縮放
它使用以下公式找到正態分佈的stddev 值,然後使用正態分佈查詢權重,
stddev = sqrt(scale / n)
其中 n 表示,
mode = fan_in 時的輸入單元數
mode = fan_out 時的輸出單元數
mode = fan_avg 時的輸入和輸出單元的平均數
類似地,它使用以下公式找到均勻分佈的limit,然後使用均勻分佈查詢權重,
limit = sqrt(3 * scale / n)
lecun_normal
使用輸入資料的 lecun 正態分佈生成值。
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,然後應用正態分佈
stddev = sqrt(1 / fan_in)
其中,fan_in 表示輸入單元的數量。
lecun_uniform
使用輸入資料的 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,然後應用均勻分佈
limit = sqrt(3 / fan_in)
其中,
fan_in 表示輸入單元的數量
fan_out 表示輸出單元的數量
glorot_normal
使用輸入資料的 glorot 正態分佈生成值。
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,然後應用正態分佈
stddev = sqrt(2 / (fan_in + fan_out))
其中,
fan_in 表示輸入單元的數量
fan_out 表示輸出單元的數量
glorot_uniform
使用輸入資料的 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,然後應用均勻分佈
limit = sqrt(6 / (fan_in + fan_out))
其中,
fan_in 表示輸入單元的數量。
fan_out 表示輸出單元的數量
he_normal
使用輸入資料的 he 正態分佈生成值。
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,然後應用正態分佈。
stddev = sqrt(2 / fan_in)
其中,fan_in 表示輸入單元的數量。
he_uniform
使用輸入資料的 he 均勻分佈生成值。
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) )
約束
在機器學習中,在最佳化階段將對引數(權重)設定約束。<>約束模組提供不同的函式來設定層上的約束。一些約束函式如下所示。
非負
約束權重為非負。
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) )
其中,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 表示上限
axis 表示要應用約束的維度。例如,在 Shape (2,3,4) 中,axis 0 表示第一維度,1 表示第二維度,2 表示第三維度
最小最大範數
約束權重為指定最小值和最大值之間的範數。
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 表示應用權重約束的速率。
正則化器
在機器學習中,正則化器用於最佳化階段。它在最佳化期間對層引數應用一些懲罰。Keras 正則化模組提供以下函式來設定層上的懲罰。正則化僅在逐層基礎上應用。
L1 正則化器
它提供基於 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 正則化器
它提供基於 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 正則化器
它提供基於 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))
啟用函式
在機器學習中,啟用函式是一個特殊的函式,用於查詢特定神經元是否被啟用。基本上,啟用函式對輸入資料進行非線性變換,從而使神經元能夠更好地學習。神經元的輸出取決於啟用函式。
正如您回憶起單一感知的概念一樣,感知器(神經元)的輸出僅僅是啟用函式的結果,它接受所有輸入與其對應權重的乘積之和,以及任何可用的整體偏差。
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,)))
其中,activation 指的是層的啟用函式。它可以透過函式名稱簡單地指定,並且該層將使用相應的啟用器。
elu
應用指數線性單元。
from keras.models import Sequential from keras.layers import Activation, Dense model = Sequential() model.add(Dense(512, activation = 'elu', input_shape = (784,)))
selu
應用縮放指數線性單元。
from keras.models import Sequential from keras.layers import Activation, Dense model = Sequential() model.add(Dense(512, activation = 'selu', input_shape = (784,)))
relu
應用修正線性單元。
from keras.models import Sequential from keras.layers import Activation, Dense model = Sequential() model.add(Dense(512, activation = 'relu', input_shape = (784,)))
softmax
應用 Softmax 函式。
from keras.models import Sequential from keras.layers import Activation, Dense model = Sequential() model.add(Dense(512, activation = 'softmax', input_shape = (784,)))
softplus
應用 Softplus 函式。
from keras.models import Sequential from keras.layers import Activation, Dense model = Sequential() model.add(Dense(512, activation = 'softplus', input_shape = (784,)))
softsign
應用 Softsign 函式。
from keras.models import Sequential from keras.layers import Activation, Dense model = Sequential() model.add(Dense(512, activation = 'softsign', input_shape = (784,)))
tanh
應用雙曲正切函式。
from keras.models import Sequential from keras.layers import Activation, Dense model = Sequential() model.add(Dense(512, activation = 'tanh', input_shape = (784,)))
sigmoid
應用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
應用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,)))
exponential
應用指數函式。
from keras.models import Sequential from keras.layers import Activation, Dense model = Sequential() model.add(Dense(512, activation = 'exponential', input_shape = (784,)))
序號 | 層 & 描述 |
---|---|
1 |
密集層是常規的全連線神經網路層。 |
2 |
Dropout是機器學習中一個重要的概念。 |
3 |
Flatten用於將輸入扁平化。 |
4 |
Reshape用於改變輸入的形狀。 |
5 |
Permute也用於使用模式改變輸入的形狀。 |
6 |
RepeatVector用於將輸入重複設定的次數n。 |
7 |
Lambda用於使用表示式或函式轉換輸入資料。 |
8 |
Keras包含許多用於建立基於卷積的ANN的層,通常稱為卷積神經網路(CNN)。 |
9 |
它用於對時間資料執行最大池化操作。 |
10 |
區域性連線層類似於Conv1D層,但不同之處在於Conv1D層的權重是共享的,而這裡權重是不共享的。 |
11 |
它用於合併輸入列表。 |
12 |
它在輸入層執行嵌入操作。 |