1. 程式人生 > >Keras學習筆記02——常用的網路層

Keras學習筆記02——常用的網路層

在搭建神經網路結構時,我們要向網路中新增一些網路層,下面列舉出來常用的網路層及其相關用法。

一、常用層

常用層對應於core模組,core內部定義了一系列常用的網路層,包括全連線、啟用層等。

1.Dense層

Dense層:全連線層。

keras.layers.core.Dense(output_dim, init='glorot_uniform', activation='linear', weights=None, W_regularizer=None, b_regularizer=None, activity_regularizer=None, W_constraint=None
, b_constraint=None, bias=True, input_dim=None)
  • output_dim:大於0的整數,代表該層的輸出維度。模型中非首層的全連線層其輸入維度可以自動推斷,因此非首層的全連線定義時不需要指定輸入維度。
  • init:初始化方法,為預定義初始化方法名的字串,或用於初始化權重的Theano函式。該引數僅在不傳遞weights引數時才有意義。
  • activation:啟用函式,為預定義的啟用函式名,或逐元素(element-wise)的Theano函式。如果不指定該引數,將不會使用任何啟用函式(即使用線性啟用函式:a(x)=x)。
  • weights:權值,為numpy array的list。該list應含有一個形如(input_dim,output_dim)的權重矩陣和一個形如(output_dim,)的偏置向量。
  • W_regularizer:施加在權重上的正則項,為WeightRegularizer物件。
  • b_regularizer:施加在偏置向量上的正則項,為WeightRegularizer物件。
  • activity_regularizer:施加在輸出上的正則項,為ActivityRegularizer物件。
  • W_constraints:施加在權重上的約束項,為Constraints物件。
  • b_constraints:施加在偏置上的約束項,為Constraints物件。
  • bias:布林值,是否包含偏置向量(即層對輸入做線性變換還是仿射變換)。
  • input_dim:整數,輸入資料的維度。當Dense層作為網路的第一層時,必須指定該引數或input_shape引數。

2.Activation層

啟用層對一個層的輸出施加啟用函式。

keras.layers.core.Activation(activation)
  • activation:將要使用的啟用函式,為預定義啟用函式名或一個Tensorflow/Theano的函式。

3.Dropout層

為輸入資料施加Dropout。Dropout將在訓練過程中每次更新引數時隨機斷開一定百分比(p)的輸入神經元連線,Dropout層用於防止過擬合。

keras.layers.core.Dropout(p)
  • p:0~1的浮點數,控制需要斷開的連結的比例

4.Flatten層

Flatten層用來將輸入“壓平”,即把多維的輸入一維化,常用在從卷積層到全連線層的過渡。Flatten不影響batch的大小。

keras.layers.core.Flatten()

5.Reshape層

Reshape層用來將輸入shape轉換為特定的shape.

keras.layers.core.Reshape(target_shape)
  • target_shape:目標shape,為整數的tuple,不包含樣本數目的維度(batch大小)

二、卷積層

1.Convolution2D層

二維卷積層對二維輸入進行滑動窗卷積,當使用該層作為第一層時,應提供input_shape引數。例如input_shape = (3,128,128)代表128*128的彩色RGB影象。

keras.layers.convolutional.Convolution2D(nb_filter, nb_row, nb_col, init='glorot_uniform', activation='linear', weights=None, border_mode='valid', subsample=(1, 1), dim_ordering='th', W_regularizer=None, b_regularizer=None, activity_regularizer=None, W_constraint=None, b_constraint=None, bias=True)
  • nb_filter:卷積核的數目。
  • nb_row:卷積核的行數。
  • nb_col:卷積核的列數。
  • border_mode:邊界模式,為“valid”或“same”
  • subsample:長為2的tuple,輸出對輸入的下采樣因子,更普遍的稱呼是“strides”。
  • dim_ordering:‘th’或‘tf’。‘th’模式中通道維(如彩色影象的3通道)位於第1個位置(維度從0開始算),而在‘tf’模式中,通道維位於第3個位置。例如128*128的三通道彩色圖片,在‘th’模式中input_shape應寫為(3,128,128),而在‘tf’模式中應寫為(128,128,3),注意這裡3出現在第0個位置,因為input_shape不包含樣本數的維度,在其內部實現中,實際上是(None,3,128,128)和(None,128,128,3)。預設是image_dim_ordering指定的模式,可在~/.keras/keras.json中檢視,若沒有設定過則為’tf’。

2.Deconvolution2D層

該層是卷積操作的轉置(反捲積)。需要反捲積的情況通常發生在使用者想要對一個普通卷積的結果做反方向的變換。例如,將具有該卷積層輸出shape的tensor轉換為具有該卷積層輸入shape的tensor。,同時保留與卷積層相容的連線模式。

keras.layers.convolutional.Deconvolution2D(nb_filter, nb_row, nb_col, output_shape, init='glorot_uniform', activation='linear', weights=None, border_mode='valid', subsample=(1, 1), dim_ordering='tf', W_regularizer=None, b_regularizer=None, activity_regularizer=None, W_constraint=None, b_constraint=None, bias=True)
  • output_shape:反捲積的輸出shape,為整數的tuple,形如(nb_samples,nb_filter,nb_output_rows,nb_output_cols),計算output_shape的公式是:o = s (i - 1) + a + k - 2p,其中a的取值範圍是0~s-1,其中:
    1. i:輸入的size(rows或cols)
    2. k:卷積核大小(nb_filter)
    3. s: 步長(subsample)
    4. a:使用者指定的的用於區別s個不同的可能output size的引數

三、池化層

1.MaxPooling2D層

為空域訊號施加最大值池化。

keras.layers.convolutional.MaxPooling2D(pool_size=(2, 2), strides=None, border_mode='valid', dim_ordering='th')
  • pool_size:長為2的整數tuple,代表在兩個方向(豎直,水平)上的下采樣因子,如取(2,2)將使圖片在兩個維度上均變為原長的一半。
  • strides:長為2的整數tuple,或者None,步長值。

四、規範層

1.BatchNormalization層

該層在每個batch上將前一層的啟用值重新規範化,即使得其輸出資料的均值接近0,其標準差接近1。

keras.layers.normalization.BatchNormalization(epsilon=1e-06, mode=0, axis=-1, momentum=0.9, weights=None, beta_init='zero', gamma_init='one')
  • epsilon:大於0的小浮點數,用於防止除0錯誤。
  • mode:整數,指定規範化的模式,取0或1:
    1. 0:按特徵規範化,輸入的各個特徵圖將獨立被規範化。規範化的軸由引數axis指定。注意,如果輸入是形如(samples,channels,rows,cols)的4D影象張量,則應設定規範化的軸為1,即沿著通道軸規範化。輸入格式是‘tf’同理。
    2. 1:按樣本規範化,該模式預設輸入為2D。
  • axis:整數,指定當mode=0時規範化的軸。例如輸入是形如(samples,channels,rows,cols)的4D影象張量,則應設定規範化的軸為1,意味著對每個特徵圖進行規範化。
  • momentum:在按特徵規範化時,計算資料的指數平均數和標準差時的動量。
  • weights:初始化權重,為包含2個numpy array的list,其shape為[(input_shape,),(input_shape)]。
  • beta_init:beta的初始化方法,為預定義初始化方法名的字串,或用於初始化權重的Theano函式。該引數僅在不傳遞weights引數時有意義。
  • gamma_init:gamma的初始化方法,為預定義初始化方法名的字串,或用於初始化權重的Theano函式。該引數僅在不傳遞weights引數時有意義。