目錄node
本文是 Keras 2.2.4 文檔的閱讀筆記,旨在以自頂向下的角度創建起對 Keras 主要模塊的認識,同時方便記憶。算法
內容將不按期更新補充。後端
compile
:用於配置模型的訓練方法。fit
:以固定數量的輪次(epoch)訓練模型。evaluate
:在測試模式,返回偏差值和評估標準值,計算逐批次(batch)進行。predict
:爲輸入樣本生成輸出預測,計算逐批次(batch)進行。train_on_batch
:一批樣品的單次梯度更新。test_on_batch
:在一批樣本上評估模型。predict_on_batch
:返回一批樣本的模型預測值。fit_generator
:使用 Python 生成器或 Sequence
實例逐批生成的數據,按批次訓練模型。生成器與模型並行運行,以提升效率。evaluate_generator
:在數據生成器上評估模型。predict_generator
:爲來自數據生成器的輸入樣本生成預測。get_layer
:根據名稱(惟一)或索引值查找網絡層。在函數式 API 中,給定一些輸入張量(tensor)和輸出張量,能夠實例化一個 Model
。api
compile
:用於配置模型的訓練方法。fit
:以固定數量的輪次(epoch)訓練模型。evaluate
:在測試模式,返回偏差值和評估標準值,計算逐批次(batch)進行。predict
:爲輸入樣本生成輸出預測,計算逐批次(batch)進行。train_on_batch
:一批樣品的單次梯度更新。test_on_batch
:在一批樣本上評估模型。predict_on_batch
:返回一批樣本的模型預測值。fit_generator
:使用 Python 生成器或 Sequence
實例逐批生成的數據,按批次訓練模型。生成器與模型並行運行,以提升效率。evaluate_generator
:在數據生成器上評估模型。predict_generator
:爲來自數據生成器的輸入樣本生成預測。get_layer
:根據名稱(惟一)或索引值查找網絡層。全部 Keras 網絡層都有不少共同的函數:數組
layer.get_weights()
:以含有 Numpy 矩陣的列表形式返回層的權重。layer.set_weights(weights)
:從含有 Numpy 矩陣的列表中設置層的權重(與 get_weights
的輸出形狀相同)。layer.get_config()
:返回包含層配置的字典。若是一個層具備單個節點(i.e. 若是它不是共享層), 能夠獲得它的輸入張量、輸出張量、輸入尺寸和輸出尺寸:網絡
layer.input
layer.output
layer.input_shape
layer.output_shape
若是層有多個節點, 可使用如下函數:函數
layer.get_input_at(node_index)
layer.get_output_at(node_index)
layer.get_input_shape_at(node_index)
layer.get_output_shape_at(node_index)
Dense
經常使用的的全鏈接層。Dense
實現如下操做: output = activation(dot(input, kernel) + bias)
其中 activation
是按逐個元素計算的激活函數,kernel
是由網絡層建立的權值矩陣,以及 bias
是其建立的偏置向量(只在 use_bias
爲 True
時纔有用)。注意:若是該層的輸入的秩大於2,那麼它首先被展平而後 再計算與 kernel
的點乘。性能
Activation
將激活函數應用於輸出。學習
Dropout
將 Dropout 應用於輸入。Dropout 包括在訓練中每次更新時,將輸入單元的按比率隨機設置爲 0,這有助於防止過擬合。測試
Flatten
將輸入展平。
Input
Input()
用於實例化 Keras 張量。
Reshape
將輸入從新調整爲特定的尺寸。
根據給定的模式置換輸入的維度。在某些場景下頗有用,例如將 RNN 和 CNN 鏈接在一塊兒。
RepeatVector
將輸入重複 n
次。
Lambda
將任意表達式封裝爲 Layer
對象。
ActivityRegularization
對基於代價函數的輸入活動應用一個更新。
Masking
使用覆蓋值覆蓋序列,以跳過期間步。對於輸入張量的每個時間步(張量的第一個維度),若是全部時間步中輸入張量的值與 mask_value
相等,那麼這個時間步將在全部下游層被覆蓋(跳過)。
SpatialDropout1D
Dropout 的 Spatial 1D 版本。此版本的功能與 Dropout 相同,但它會丟棄整個 1D 的特徵圖而不是丟棄單個元素。
SpatialDropout2D
Dropout 的 Spatial 2D 版本。此版本的功能與 Dropout 相同,但它會丟棄整個 2D 的特徵圖而不是丟棄單個元素。
SpatialDropout3D
Dropout 的 Spatial 3D 版本。此版本的功能與 Dropout 相同,但它會丟棄整個 3D 的特徵圖而不是丟棄單個元素。
結構圖
Conv1D
1D 卷積層(例如時序卷積)。該層建立了一個卷積核,該卷積核以單個空間(或時間)維上的層輸入進行卷積,以生成輸出張量。
Conv2D
2D 卷積層(例如對圖像的空間卷積)。該層建立了一個卷積核,該卷積覈對層輸入進行卷積,以生成輸出張量。
Conv3D
3D 卷積層(例如立體空間卷積)。該層建立了一個卷積核,該卷積覈對層輸入進行卷積,以生成輸出張量。
SeparableConv1D
深度方向的可分離 1D 卷積。
可分離的卷積的操做包括,首先執行深度方向的空間卷積(分別做用於每一個輸入通道),緊接一個將所得輸出通道 混合在一塊兒的逐點卷積。
直觀地說,可分離的卷積能夠理解爲一種將卷積核分解成 兩個較小的卷積核的方法,或者做爲 Inception 塊的 一個極端版本。
SeparableConv2D
深度方向的可分離 2D 卷積。
可分離的卷積的操做包括,首先執行深度方向的空間卷積(分別做用於每一個輸入通道),緊接一個將所得輸出通道 混合在一塊兒的逐點卷積。
直觀地說,可分離的卷積能夠理解爲一種將卷積核分解成 兩個較小的卷積核的方法,或者做爲 Inception 塊的 一個極端版本。
DepthwiseConv2D
深度可分離 2D 卷積。深度可分離卷積包括僅執行深度空間卷積中的第一步(其分別做用於每一個輸入通道)。
Conv2DTranspose
轉置卷積層(或被成爲反捲積)。對轉置卷積的需求通常來自但願使用與正常卷積相反方向的變換,即,將具備卷積輸出尺寸的東西 轉換爲具備卷積輸入尺寸的東西,同時保持與所述卷積相容的連通性模式。
Conv3DTranspose
轉置卷積層(或被成爲反捲積)。對轉置卷積的需求通常來自但願使用與正常卷積相反方向的變換,即,將具備卷積輸出尺寸的東西轉換爲具備卷積輸入尺寸的東西,同時保持與所述卷積相容的連通性模式。
Cropping1D
1D 輸入的裁剪層(例如時間序列),它沿着時間維度(第 1 個軸)裁剪。
Cropping2D
2D 輸入的裁剪層(例如圖像),它沿着空間維度裁剪,即寬度和高度。
Cropping3D
3D 數據的裁剪層(例如空間或時空)。
UpSampling1D
1D 輸入的上採樣層。
UpSampling2D
2D 輸入的上採樣層。
UpSampling3D
3D 輸入的上採樣層。
ZeroPadding1D
1D 輸入的零填充層(例如,時間序列)。
ZeroPadding2D
2D 輸入的零填充層(例如圖像)。該圖層能夠在圖像張量的頂部、底部、左側和右側添加零表示的行和列。
ZeroPadding3D
3D 數據的零填充層(空間或時空)。
結構圖
MaxPooling1D
對於時序數據的最大池化。
MaxPooling2D
對於空間數據的最大池化。
MaxPooling3D
對於 3D(空間,或時空間)數據的最大池化。
AveragePooling1D
對於時序數據的平均池化。
AveragePooling2D
對於空間數據的平均池化。
AveragePooling3D
對於 3D (空間,或者時空間)數據的平均池化。
GlobalMaxPooling1D
對於時序數據的全局最大池化。
GlobalAveragePooling1D
對於時序數據的全局平均池化。
GlobalMaxPooling2D
對於空間數據的全局最大池化。
GlobalAveragePooling2D
對於空間數據的全局平均池化。
GlobalMaxPooling3D
對於 3D 數據的全局最大池化。
GlobalAveragePooling3D
對於 3D 數據的全局平均池化。
結構圖
RNN
循環神經網絡層基類。
該層支持以可變數量的時間步對輸入數據進行 masking。
能夠將 RNN 層設置爲 stateful
(有狀態的),這意味着針對一個批次的樣本計算的狀態將被從新用做下一批樣本的初始狀態。這假定在不一樣連續批次的樣品之間有一對一的映射。要重置模型的狀態,請在特定圖層或整個模型上調用 .reset_states()
。
SimpleRNN
全鏈接的 RNN,其輸出將被反饋到輸入。
GRU
門限循環單元網絡,有兩種變體。
LSTM
長短時間記憶網絡層。
ConvLSTM2D
卷積 LSTM。它相似於 LSTM 層,但輸入變換和循環變換都是卷積的。
ConvLSTM2DCell
ConvLSTM2D
的單元(Cell)類。
SimpleRNNCell
SimpleRNN
的單元(Cell)類。
GRUCell
GRU
層的單元(Cell)類。
LSTM
層的單元(Cell)類。
CuDNNGRU
由 CuDNN 支持的快速 GRU 實現。只能以 TensorFlow 後端運行在 GPU 上。
CuDNNLSTM
由 CuDNN 支持的快速 LSTM 實現。只能以 TensorFlow 後端運行在 GPU 上。
結構圖
Add
計算輸入張量列表的和。它接受一個張量的列表,全部的張量必須有相同的輸入尺寸,而後返回一個張量(和輸入張量尺寸相同)。
Subtract
計算兩個輸入張量的差。它接受一個長度爲 2 的張量列表,兩個張量必須有相同的尺寸,而後返回一個值爲(inputs[0] - inputs[1]
)的張量,輸出張量和輸入張量尺寸相同。
Multiply
計算輸入張量列表的(逐元素間的)乘積。它接受一個張量的列表,全部的張量必須有相同的輸入尺寸,而後返回一個張量(和輸入張量尺寸相同)。
Average
計算輸入張量列表的平均值。它接受一個張量的列表,全部的張量必須有相同的輸入尺寸,而後返回一個張量(和輸入張量尺寸相同)。
Maximum
計算輸入張量列表的(逐元素間的)最大值。它接受一個張量的列表,全部的張量必須有相同的輸入尺寸,而後返回一個張量(和輸入張量尺寸相同)。
Minimum
計算輸入張量列表的(逐元素間的)最小值。它接受一個張量的列表,全部的張量必須有相同的輸入尺寸,而後返回一個張量(和輸入張量尺寸相同)。
Concatenate
鏈接一個輸入張量的列表。它接受一個張量的列表,除了鏈接軸以外,其餘的尺寸都必須相同,而後返回一個由全部輸入張量鏈接起來的輸出張量。
Dot
計算兩個張量之間樣本的點積。
例如,若是做用於輸入尺寸爲 (batch_size, n)
的兩個張量 a
和 b
,那麼輸出結果就會是尺寸爲 (batch_size, 1)
的一個張量。在這個張量中,每個條目 i
是 a[i]
和 b[i]
之間的點積。
結構圖
LeakyReLU
帶泄漏的 ReLU。當神經元未激活時,它仍容許賦予一個很小的梯度: f(x) = alpha * x for x < 0
, f(x) = x for x >= 0
。
PReLU
參數化的 ReLU。形式: f(x) = alpha * x for x < 0
, f(x) = x for x >= 0
, 其中 alpha
是一個可學習的數組,尺寸與 x 相同。
ELU
指數線性單元。形式: f(x) = alpha * (exp(x) - 1.) for x < 0
, f(x) = x for x >= 0
。
ThresholdedReLU
帶閾值的 ReLU。形式: f(x) = x for x > theta
, f(x) = 0 otherwise
。
Softmax
Softmax 激活函數。
ReLU
ReLU 激活函數。使用默認值時,它返回逐個元素的 max(x,0)
。不然:
x >= max_value
,返回 f(x) = max_value
,threshold <= x < max_value
,返回 f(x) = x
,f(x) = negative_slope * (x - threshold)
。結構圖
Embedding
將正整數(索引值)轉換爲固定尺寸的稠密向量。該層只能用做模型中的第一層。
BatchNormalization
批量標準化層,在每個批次的數據中標準化前一層的激活項,即,應用一個維持激活項平均值接近 0,標準差接近 1 的轉換。
GaussianNoise
應用以 0 爲中心的加性(additive)高斯噪聲。它是一個正則化層,只在訓練時才被激活。
GaussianDropout
應用以 1 爲中心的乘性(multiplicative)高斯噪聲。它是一個正則化層,只在訓練時才被激活。
AlphaDropout
將 Alpha Dropout 應用到輸入。
Alpha Dropout 是一種 Dropout,它保持輸入的平均值和方差與原來的值不變,以確保即便在 dropout 後也能實現自我歸一化。經過隨機將激活設置爲負飽和值,Alpha Dropout 很是適合按比例縮放的指數線性單元(SELU)。
LocallyConnected1D
1D 輸入的局部鏈接層。
LocallyConnected1D
層與 Conv1D
層的工做方式相同,除了權值不共享外,也就是說,在輸入的每一個不一樣部分應用不一樣的一組過濾器。
LocallyConnected2D
2D 輸入的局部鏈接層。
LocallyConnected2D
層與 Conv2D
層的工做方式相同,除了權值不共享外,也就是說,在輸入的每一個不一樣部分應用不一樣的一組過濾器。
TimeDistributed
這個封裝器將一個層應用於輸入的每一個時間片。輸入至少爲 3D,且第一個維度應該是時間所表示的維度。
Bidirectional
RNN
的雙向封裝器,對序列進行前向和後向計算。
結構圖
第一個參數是真值,第二個參數是預測值。
mean_squared_error
mean_absolute_error
mean_absolute_percentage_error
mean_squared_logarithmic_error
squared_hinge
hinge
categorical_hinge
logcosh
對於小的 x
,log(cosh(x))
近似等於 (x ** 2) / 2
。對於大的 x
,近似於 abs(x) - log(2)
。這表示 logcosh
與均方偏差大體相同,可是不會受到偶爾極端的錯誤預測的影響。
categorical_crossentropy
當使用 categorical_crossentropy
損失時,目標值應該是分類格式(即,若是有 10 個類,每一個樣本的目標值應該是一個 10 維的向量,這個向量除了表示類別的那個索引爲 1,其餘均爲 0)。爲了將整數目標值轉換爲分類目標值,你可使用 Keras 實用函數 to_categorical
。
sparse_categorical_crossentropy
binary_crossentropy
kullback_leibler_divergence
poisson
cosine_proximity
結構圖
評價函數用於評估當前訓練模型的性能。
自定義評價函數應該在編譯的時候(compile)傳遞進去。該函數須要以 (y_true, y_pred)
做爲輸入參數,並返回一個張量做爲輸出結果。
binary_accuracy
categorical_accuracy
sparse_categorical_accuracy
top_k_categorical_accuracy
sparse_top_k_categorical_accuracy
結構圖
參數 clipnorm
和 clipvalue
能在全部的優化器中使用,用於控制梯度裁剪(Gradient Clipping)。
SGD
隨機梯度降低優化器,包含擴展功能的支持:
RMSprop
RMSProp 優化器,常是訓練循環神經網絡 RNN 的不錯選擇。建議使用優化器的默認參數(除了學習率 lr
)。
Adagrad
Adagrad 優化器,Adagrad 是一種具備特定參數學習率的優化器,它根據參數在訓練期間的更新頻率進行自適應調整。參數接收的更新越多,更新越小。建議使用優化器的默認參數。
Adadelta
Adadelta 優化器,是 Adagrad 的一個具備更強魯棒性的的擴展版本,能夠設置初始學習速率和衰減因子。建議使用優化器的默認參數。
Adam
Adam 本質上是 RMSProp
與動量 momentum 的結合
Adamax
Adamax 優化器,是 Adam 算法基於無窮範數(infinity norm)的變種。
Nadam
Nesterov 版本 Adam
優化器,Nadam 是採用 Nesterov momentum 版本的 Adam
優化器。建議使用優化器的默認參數。
結構圖
激活函數能夠經過設置單獨的激活層實現,也能夠在構造層對象時經過傳遞 activation
參數實現。
softmax
Softmax 激活函數。
elu
指數線性單元,若是 x > 0
,返回值爲 x
;若是 x < 0
返回值爲 alpha * (exp(x)-1)
。
selu
可伸縮的指數線性單元(SELU),等同於:scale * elu(x, alpha)
,其中 alpha 和 scale 是預約義的常量。
softplus
Softplus 激活函數,返回 log(exp(x) + 1)
.
softsign
Softsign 激活函數,返回 x / (abs(x) + 1)
.
relu
整流線性單元。使用默認值時,它返回逐元素的 max(x, 0)
;不然,它遵循:若是 x >= max_value
:f(x) = max_value
;若是 threshold <= x < max_value
:f(x) = x
;不然:f(x) = alpha * (x - threshold)
。
tanh
雙曲正切激活函數。
sigmoid
Sigmoid 激活函數。
hard_sigmoid
Hard sigmoid 激活函數,若是 x < -2.5
,返回 0
;若是 x > 2.5
,返回 1
;若是 -2.5 <= x <= 2.5
,返回 0.2 * x + 0.5
。
exponential
天然數指數激活函數。
linear
線性激活函數(即不作任何改變)。
結構圖
正則化器容許在優化過程當中對層的參數或層的激活狀況進行懲罰。網絡優化的損失函數也包括這些懲罰項。
懲罰是以層爲對象進行的。具體的 API 因層而異,但 Dense
、Conv1D
、Conv2D
和 Conv3D
這些層具備統一的 API。
正則化器開放 3 個關鍵字參數:
kernel_regularizer
:keras.regularizers.Regularizer
的實例bias_regularizer
:keras.regularizers.Regularizer
的實例activity_regularizer
:keras.regularizers.Regularizer
的實例任何輸入一個權重矩陣、返回一個損失貢獻張量的函數,均可以用做正則化器。
結構圖
constraints
模塊的函數容許在優化期間對網絡參數設置約束(例如非負性)。
約束是以層爲對象進行的。具體的 API 因層而異,但 Dense
,Conv1D
,Conv2D
和 Conv3D
這些層具備統一的 API。
約束層開放 2 個關鍵字參數:kernel_constraint
用於主權重矩陣;bias_constraint
用於偏置。
MaxNorm
MaxNorm 最大範數權值約束。映射到每一個隱藏單元的權值的約束,使其具備小於或等於指望值的範數。
NonNeg
權重非負的約束。
UnitNorm
映射到每一個隱藏單元的權值的約束,使其具備單位範數。
MinMaxNorm
MinMaxNorm 最小/最大範數權值約束。映射到每一個隱藏單元的權值的約束,使其範數在上下界之間。
結構圖