Keras 文檔閱讀筆記(不按期更新)

Keras 文檔閱讀筆記(不按期更新)

本文是 Keras 2.2.4 文檔的閱讀筆記,旨在以自頂向下的角度創建起對 Keras 主要模塊的認識,同時方便記憶。算法

內容將不按期更新補充。後端

模型

Sequential 模型方法

  • 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:根據名稱(惟一)或索引值查找網絡層。

Model 類(函數式 API)

在函數式 API 中,給定一些輸入張量(tensor)和輸出張量,能夠實例化一個 Modelapi

方法

  • 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 網絡層

全部 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_biasTrue 時纔有用)。注意:若是該層的輸入的秩大於2,那麼它首先被展平而後 再計算與 kernel 的點乘性能

  • Activation

將激活函數應用於輸出。學習

  • Dropout

將 Dropout 應用於輸入。Dropout 包括在訓練中每次更新時,將輸入單元的按比率隨機設置爲 0,這有助於防止過擬合。測試

  • Flatten

將輸入展平。

  • Input

Input() 用於實例化 Keras 張量。

  • Reshape

將輸入從新調整爲特定的尺寸。

  • Permute

根據給定的模式置換輸入的維度。在某些場景下頗有用,例如將 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)類。

  • LSTMCell

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) 的兩個張量 ab,那麼輸出結果就會是尺寸爲 (batch_size, 1) 的一個張量。在這個張量中,每個條目 ia[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

對於小的 xlog(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

結構圖

優化器

參數 clipnormclipvalue 能在全部的優化器中使用,用於控制梯度裁剪(Gradient Clipping)。

  • SGD

隨機梯度降低優化器,包含擴展功能的支持:

  1. 動量(momentum)優化;
  2. 學習率衰減(每次參數更新後);
  3. Nestrov 動量(NAG)優化。
  • 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_valuef(x) = max_value;若是 threshold <= x < max_valuef(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 因層而異,但 DenseConv1DConv2DConv3D 這些層具備統一的 API。

正則化器開放 3 個關鍵字參數:

  • kernel_regularizerkeras.regularizers.Regularizer 的實例
  • bias_regularizerkeras.regularizers.Regularizer 的實例
  • activity_regularizerkeras.regularizers.Regularizer 的實例

任何輸入一個權重矩陣、返回一個損失貢獻張量的函數,均可以用做正則化器。

結構圖

約束

constraints 模塊的函數容許在優化期間對網絡參數設置約束(例如非負性)。

約束是以層爲對象進行的。具體的 API 因層而異,但 DenseConv1DConv2DConv3D 這些層具備統一的 API。

約束層開放 2 個關鍵字參數:kernel_constraint 用於主權重矩陣;bias_constraint 用於偏置。

  • MaxNorm

MaxNorm 最大範數權值約束。映射到每一個隱藏單元的權值的約束,使其具備小於或等於指望值的範數。

  • NonNeg

權重非負的約束。

  • UnitNorm

映射到每一個隱藏單元的權值的約束,使其具備單位範數。

  • MinMaxNorm

MinMaxNorm 最小/最大範數權值約束。映射到每一個隱藏單元的權值的約束,使其範數在上下界之間。

結構圖

相關文章
相關標籤/搜索