1. 程式人生 > 實用技巧 >Keras.layers各種層介紹

Keras.layers各種層介紹

本文章向大家介紹Keras(七)Keras.layers各種層介紹,主要包括Keras(七)Keras.layers各種層介紹使用例項、應用技巧、基本知識點總結和需要注意事項,具有一定的參考價值,需要的朋友可以參考一下。

一、網路層

keras的層主要包括:

常用層(Core)、卷積層(Convolutional)、池化層(Pooling)、區域性連線層、遞迴層(Recurrent)、嵌入層( Embedding)、高階啟用層、規範層、噪聲層、包裝層,當然也可以編寫自己的層。

對於層的操作

layer.get_weights() #返回該層的權重(numpy array)
layer.set_weights(weights)#將權重載入到該層
config = layer.get_config()#儲存該層的配置
layer = layer_from_config(config)#載入一個配置到該層

#如果層僅有一個計算節點(即該層不是共享層),則可以通過下列方法獲得輸入張量、輸出張量、輸入資料的形狀和輸出資料的形狀:
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)

1、常用網路層

1.1、Dense層(全連線層)

keras.layers.core.Dense(units,activation=None,use_bias=True,kernel_initializer='glorot_uniform',bias_initializer='zeros',kernel_regularizer=None,bias_regularizer=None,activity_regularizer=None,kernel_constraint=None,bias_constraint=None)

引數:

  • units:大於0的整數,代表該層的輸出維度。
  • use_bias:布林值,是否使用偏置項
  • kernel_initializer:權值初始化方法,為預定義初始化方法名的字串,或用於初始化權重的初始化器。
  • bias_initializer:偏置向量初始化方法,為預定義初始化方法名的字串,或用於初始化偏置向量的初始化器。
  • regularizer:正則項,kernel為權重的、bias為偏執的,activity為輸出的
  • constraints:約束項,kernel為權重的,bias為偏執的。
  • activation:啟用函式,為預定義的啟用函式名(參考啟用函式),或逐元素(element-wise)的Theano函式。如果不指定該引數,將不會使用任何啟用函式(即使用線性啟用函式:a(x)=x)
  • input_dim:該層輸入的維度

本層實現的運算為

output=activation(dot(input,kernel)+bias)output=activation(dot(input,kernel)+bias)

1.2、Activation層

keras.layers.core.Activation(activation)

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

引數:

  • activation:將要使用的啟用函式,為預定義啟用函式名或一個Tensorflow/Theano的函式。參考啟用函式

輸入shape:任意,當使用啟用層作為第一層時,要指定input_shape
輸出shape:與輸入shape相同

1.3、dropout層

keras.layers.core.Dropout(rate, noise_shape=None, seed=None)

為輸入資料施加Dropout。Dropout將在訓練過程中每次更新引數時按一定概率(rate)隨機斷開輸入神經元,Dropout層用於防止過擬合。

引數

  • rate:0~1的浮點數,控制需要斷開的神經元的比例
  • noise_shape:整數張量,為將要應用在輸入上的二值Dropout mask的shape,例如你的輸入為(batch_size, timesteps, features),並且你希望在各個時間步上的Dropout mask都相同,則可傳入noise_shape=(batch_size, 1, features)。
  • seed:整數,使用的隨機數種子

1.4、Flatten層

keras.layers.core.Flatten()

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

demo:

model = Sequential()
model.add(Convolution2D(64, 3, 3,
            border_mode='same',
            input_shape=(3, 32, 32)))
# now: model.output_shape == (None, 64, 32, 32)

model.add(Flatten())
# now: model.output_shape == (None, 65536)

1.5、Reshape層

keras.layers.core.Reshape(target_shape)

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

引數

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

輸入shape:任意,但輸入的shape必須固定。當使用該層為模型首層時,需要指定input_shape引數
輸出shape:(batch_size,)+target_shape

demo:

# as first layer in a Sequential model
model = Sequential()
model.add(Reshape((3, 4), input_shape=(12,)))
# now: model.output_shape == (None, 3, 4)
# note: `None` is the batch dimension

# as intermediate layer in a Sequential model
model.add(Reshape((6, 2)))
# now: model.output_shape == (None, 6, 2)

# also supports shape inference using `-1` as dimension
model.add(Reshape((-1, 2, 2)))
# now: model.output_shape == (None, 3, 2, 2)

1.6、Permute層

keras.layers.core.Permute(dims)

Permute層將輸入的維度按照給定模式進行重排,例如,當需要將RNN和CNN網路連線時,可能會用到該層。所謂的重排也就是交換兩行

引數

  • dims:整數tuple,指定重排的模式,不包含樣本數的維度。重拍模式的下標從1開始。例如(2,1)代表將輸入的第二個維度重排到輸出的第一個維度,而將輸入的第一個維度重排到第二個維度
model = Sequential()
model.add(Permute((2, 1), input_shape=(10, 64)))
# now: model.output_shape == (None, 64, 10)
# note: `None` is the batch dimension

輸入shape:任意,當使用啟用層作為第一層時,要指定input_shape
輸出shape:與輸入相同,但是其維度按照指定的模式重新排列

1.7、RepeatVector層

keras.layers.core.RepeatVector(n)

RepeatVector層將輸入重複n次

引數

  • n:整數,重複的次數

輸入shape:形如(nb_samples, features)的2D張量
輸出shape:形如(nb_samples, n, features)的3D張量

例子

model = Sequential()
model.add(Dense(32, input_dim=32))
# now: model.output_shape == (None, 32)
# note: `None` is the batch dimension

model.add(RepeatVector(3))
# now: model.output_shape == (None, 3, 32)

1.8、Lambda層

keras.layers.core.Lambda(function, output_shape=None, mask=None, arguments=None)

本函式用以對上一層的輸出施以任何Theano/TensorFlow表示式

引數

  • function:要實現的函式,該函式僅接受一個變數,即上一層的輸出
  • output_shape:函式應該返回的值的shape,可以是一個tuple,也可以是一個根據輸入
  • shape計算輸出shape的函式
  • mask: 掩膜
  • arguments:可選,字典,用來記錄向函式中傳遞的其他關鍵字引數

輸入shape:任意,當使用該層作為第一層時,要指定input_shape
輸出shape:由output_shape引數指定的輸出shape,當使用tensorflow時可自動推斷

# add a x -> x^2 layer
model.add(Lambda(lambda x: x ** 2))

# add a layer that returns the concatenation
# of the positive part of the input and
# the opposite of the negative part

def antirectifier(x):
    x -= K.mean(x, axis=1, keepdims=True)
    x = K.l2_normalize(x, axis=1)
    pos = K.relu(x)
    neg = K.relu(-x)
    return K.concatenate([pos, neg], axis=1)

def antirectifier_output_shape(input_shape):
    shape = list(input_shape)
    assert len(shape) == 2  # only valid for 2D tensors
    shape[-1] *= 2
    return tuple(shape)

model.add(Lambda(antirectifier,
         output_shape=antirectifier_output_shape))

1.9、ActivityRegularizer層

keras.layers.core.ActivityRegularization(l1=0.0, l2=0.0)

經過本層的資料不會有任何變化,但會基於其啟用值更新損失函式值

引數

  • l1:1範數正則因子(正浮點數)
  • l2:2範數正則因子(正浮點數)

輸入shape:任意,當使用該層作為第一層時,要指定input_shape
輸出shape:與輸入shape相同

2.0、Masking層

keras.layers.core.Masking(mask_value=0.0)

2、卷積層Convolutional

2.1、Conv1D層

keras.layers.convolutional.Conv1D(filters, kernel_size, strides=1, padding='valid', dilation_rate=1, activation=None, use_bias=True, kernel_initializer='glorot_uniform', bias_initializer='zeros', kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None)

一維卷積層(即時域卷積),用以在一維輸入訊號上進行鄰域濾波。當使用該層作為首層時,需要提供關鍵字引數input_shape。例如(10,128)代表一個長為10的序列,序列中每個訊號為128向量。而(None, 128)代表變長的128維向量序列。

該層生成將輸入訊號與卷積核按照單一的空域(或時域)方向進行卷積。如果use_bias=True,則還會加上一個偏置項,若activation不為None,則輸出為經過啟用函式的輸出。

引數

  • filters:卷積核的數目(即輸出的維度)
  • kernel_size:整數或由單個整數構成的list/tuple,卷積核的空域或時域窗長度
  • strides:整數或由單個整數構成的list/tuple,為卷積的步長。任何不為1的strides均與任何不為1的dilation_rate均不相容
  • padding:補0策略,為“valid”, “same” 或“causal”,“causal”將產生因果(膨脹的)卷積,即output[t]不依賴於input[t+1:]。當對不能違反時間順序的時序訊號建模時有用。參考WaveNet: A Generative Model for Raw Audio, section 2.1.。“valid”代表只進行有效的卷積,即對邊界資料不處理。“same”代表保留邊界處的卷積結果,通常會導致輸出shape與輸入shape相同。
  • activation:啟用函式,為預定義的啟用函式名(參考啟用函式),或逐元素(element-wise)的Theano函式。如果不指定該引數,將不會使用任何啟用函式(即使用線性啟用函式:a(x)=x)
  • dilation_rate:整數或由單個整數構成的list/tuple,指定dilated convolution中的膨脹比例。任何不為1的dilation_rate均與任何不為1的strides均不相容。
  • use_bias:布林值,是否使用偏置項
  • kernel_initializer:權值初始化方法,為預定義初始化方法名的字串,或用於初始化權重的初始化器。參考initializers
  • bias_initializer:權值初始化方法,為預定義初始化方法名的字串,或用於初始化權重的初始化器。參考initializers
  • kernel_regularizer:施加在權重上的正則項,為Regularizer物件
  • bias_regularizer:施加在偏置向量上的正則項,為Regularizer物件
  • activity_regularizer:施加在輸出上的正則項,為Regularizer物件
  • kernel_constraints:施加在權重上的約束項,為Constraints物件
  • bias_constraints:施加在偏置上的約束項,為Constraints物件

輸入shape:形如(samples,steps,input_dim)的3D張量
輸出shape:形如(samples,new_steps,nb_filter)的3D張量,因為有向量填充的原因,steps的值會改變

【Tips】可以將Convolution1D看作Convolution2D的快捷版,對例子中(10,32)的訊號進行1D卷積相當於對其進行卷積核為(filter_length, 32)的2D卷積。

2.2、Conv2D層

keras.layers.convolutional.Conv2D(filters, kernel_size, strides=(1, 1), padding='valid', data_format=None, dilation_rate=(1, 1), activation=None, use_bias=True, kernel_initializer='glorot_uniform', bias_initializer='zeros', kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None)

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

引數

  • filters:卷積核的數目(即輸出的維度)
  • kernel_size:單個整數或由兩個整數構成的list/tuple,卷積核的寬度和長度。如為單個整數,則表示在各個空間維度的相同長度。
  • strides:單個整數或由兩個整數構成的list/tuple,為卷積的步長。如為單個整數,則表示在各個空間維度的相同步長。任何不為1的strides均與任何不為1的dilation_rate均不相容
  • padding:補0策略,為“valid”, “same” 。“valid”代表只進行有效的卷積,即對邊界資料不處理。“same”代表保留邊界處的卷積結果,通常會導致輸出shape與輸入shape相同。
  • activation:啟用函式,為預定義的啟用函式名(參考啟用函式),或逐元素(element-wise)的Theano函式。如果不指定該引數,將不會使用任何啟用函式(即使用線性啟用函式:a(x)=x)
  • dilation_rate:單個整數或由兩個整數構成的list/tuple,指定dilated convolution中的膨脹比例。任何不為1的dilation_rate均與任何不為1的strides均不相容。
  • data_format:字串,“channels_first”或“channels_last”之一,代表影象的通道維的位置。該引數是Keras 1.x中的image_dim_ordering,“channels_last”對應原本的“tf”,“channels_first”對應原本的“th”。以128x128的RGB影象為例,“channels_first”應將資料組織為(3,128,128),而“channels_last”應將資料組織為(128,128,3)。該引數的預設值是~/.keras/keras.json中設定的值,若從未設定過,則為“channels_last”。
  • use_bias:布林值,是否使用偏置項
  • kernel_initializer:權值初始化方法,為預定義初始化方法名的字串,或用於初始化權重的初始化器。參考initializers
  • bias_initializer:權值初始化方法,為預定義初始化方法名的字串,或用於初始化權重的初始化器。參考initializers
  • kernel_regularizer:施加在權重上的正則項,為Regularizer物件
  • bias_regularizer:施加在偏置向量上的正則項,為Regularizer物件
  • activity_regularizer:施加在輸出上的正則項,為Regularizer物件
  • kernel_constraints:施加在權重上的約束項,為Constraints物件
  • bias_constraints:施加在偏置上的約束項,為Constraints物件

輸入shape:
‘channels_first’模式下,輸入形如(samples,channels,rows,cols)的4D張量。
‘channels_last’模式下,輸入形如(samples,rows,cols,channels)的4D張量。

注意這裡的輸入shape指的是函式內部實現的輸入shape,而非函式介面應指定的input_shape,請參考下面提供的例子。

輸出shape:
‘channels_first’模式下,為形如(samples,nb_filter, new_rows, new_cols)的4D張量。
‘channels_last’模式下,為形如(samples,new_rows, new_cols,nb_filter)的4D張。量

輸出的行列數可能會因為填充方法而改變。

2.3、SeparableConv2D層

keras.layers.convolutional.SeparableConv2D(filters, kernel_size, strides=(1, 1), padding='valid', data_format=None, depth_multiplier=1, activation=None, use_bias=True, depthwise_initializer='glorot_uniform', pointwise_initializer='glorot_uniform', bias_initializer='zeros', depthwise_regularizer=None, pointwise_regularizer=None, bias_regularizer=None, activity_regularizer=None, depthwise_constraint=None, pointwise_constraint=None, bias_constraint=None)

該層是在深度方向上的可分離卷積。

可分離卷積首先按深度方向進行卷積(對每個輸入通道分別卷積),然後逐點進行卷積,將上一步的卷積結果混合到輸出通道中。引數depth_multiplier控制了在depthwise卷積(第一步)的過程中,每個輸入通道訊號產生多少個輸出通道。

直觀來說,可分離卷積可以看做講一個卷積核分解為兩個小的卷積核,或看作Inception模組的一種極端情況。

當使用該層作為第一層時,應提供input_shape引數。例如input_shape = (3,128,128)代表128*128的彩色RGB影象。

引數

  • filters:卷積核的數目(即輸出的維度)
  • kernel_size:單個整數或由兩個個整數構成的list/tuple,卷積核的寬度和長度。如為單個整數,則表示在各個空間維度的相同長度。
  • strides:單個整數或由兩個整數構成的list/tuple,為卷積的步長。如為單個整數,則表示在各個空間維度的相同步長。任何不為1的strides均與任何不為1的dilation_rate均不相容
  • padding:補0策略,為“valid”, “same”
    。“valid”代表只進行有效的卷積,即對邊界資料不處理。“same”代表保留邊界處的卷積結果,通常會導致輸出shape與輸入shape相同。
  • activation:啟用函式,為預定義的啟用函式名(參考啟用函式),或逐元素(element-wise)的Theano函式。如果不指定該引數,將不會使用任何啟用函式(即使用線性啟用函式:a(x)=x)
  • dilation_rate:單個整數或由兩個整數構成的list/tuple,指定dilated
  • convolution中的膨脹比例。任何不為1的dilation_rate均與任何不為1的strides均不相容。
  • data_format:字串,“channels_first”或“channels_last”之一,代表影象的通道維的位置。該引數是Keras1.x中的image_dim_ordering,“channels_last”對應原本的“tf”,“channels_first”對應原本的“th”。以128x128的RGB影象為例,“channels_first”應將資料組織為(3,128,128),而“channels_last”應將資料組織為(128,128,3)。該引數的預設值是~/.keras/keras.json中設定的值,若從未設定過,則為“channels_last”。
  • use_bias:布林值,是否使用偏置項 depth_multiplier:在按深度卷積的步驟中,每個輸入通道使用多少個輸出通道
  • kernel_initializer:權值初始化方法,為預定義初始化方法名的字串,或用於初始化權重的初始化器。參考initializers
  • bias_initializer:權值初始化方法,為預定義初始化方法名的字串,或用於初始化權重的初始化器。參考initializers
  • depthwise_regularizer:施加在按深度卷積的權重上的正則項,為Regularizer物件
  • pointwise_regularizer:施加在按點卷積的權重上的正則項,為Regularizer物件
  • kernel_regularizer:施加在權重上的正則項,為Regularizer物件
  • bias_regularizer:施加在偏置向量上的正則項,為Regularizer物件
  • activity_regularizer:施加在輸出上的正則項,為Regularizer物件
  • kernel_constraints:施加在權重上的約束項,為Constraints物件
  • bias_constraints:施加在偏置上的約束項,為Constraints物件
  • depthwise_constraint:施加在按深度卷積權重上的約束項,為Constraints物件
  • pointwise_constraint施加在按點卷積權重的約束項,為Constraints物件

輸入shape
‘channels_first’模式下,輸入形如(samples,channels,rows,cols)的4D張量。
‘channels_last’模式下,輸入形如(samples,rows,cols,channels)的4D張量。

注意這裡的輸入shape指的是函式內部實現的輸入shape,而非函式介面應指定的input_shape,請參考下面提供的例子。

輸出shape
‘channels_first’模式下,為形如(samples,nb_filter, new_rows, new_cols)的4D張量。
‘channels_last’模式下,為形如(samples,new_rows, new_cols,nb_filter)的4D張量。

輸出的行列數可能會因為填充方法而改變

2.4、Conv2DTranspose層

keras.layers.convolutional.Conv2DTranspose(filters, kernel_size, strides=(1, 1), padding='valid', data_format=None, activation=None, use_bias=True, kernel_initializer='glorot_uniform', bias_initializer='zeros', kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None)

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

當使用該層作為第一層時,應提供input_shape引數。例如input_shape = (3,128,128)代表128*128的彩色RGB影象。

引數

  • filters:卷積核的數目(即輸出的維度)
  • kernel_size:單個整數或由兩個個整數構成的list/tuple,卷積核的寬度和長度。如為單個整數,則表示在各個空間維度的相同長度。
  • strides:單個整數或由兩個整數構成的list/tuple,為卷積的步長。如為單個整數,則表示在各個空間維度的相同步長。任何不為1的strides均與任何不為1的dilation_rate均不相容
  • padding:補0策略,為“valid”, “same” 。“valid”代表只進行有效的卷積,即對邊界資料不處理。“same”代表保留邊界處的卷積結果,通常會導致輸出shape與輸入shape相同。
  • activation:啟用函式,為預定義的啟用函式名(參考啟用函式),或逐元素(element-wise)的Theano函式。如果不指定該引數,將不會使用任何啟用函式(即使用線性啟用函式:a(x)=x)
  • dilation_rate:單個整數或由兩個個整數構成的list/tuple,指定dilated convolution中的膨脹比例。任何不為1的dilation_rate均與任何不為1的strides均不相容。
  • data_format:字串,“channels_first”或“channels_last”之一,代表影象的通道維的位置。該引數是Keras 1.x中的image_dim_ordering,“channels_last”對應原本的“tf”,“channels_first”對應原本的“th”。以128x128的RGB影象為例,“channels_first”應將資料組織為(3,128,128),而“channels_last”應將資料組織為(128,128,3)。該引數的預設值是~/.keras/keras.json中設定的值,若從未設定過,則為“channels_last”。
  • use_bias:布林值,是否使用偏置項
  • kernel_initializer:權值初始化方法,為預定義初始化方法名的字串,或用於初始化權重的初始化器。參考initializers
  • bias_initializer:權值初始化方法,為預定義初始化方法名的字串,或用於初始化權重的初始化器。參考initializers
  • kernel_regularizer:施加在權重上的正則項,為Regularizer物件
  • bias_regularizer:施加在偏置向量上的正則項,為Regularizer物件
  • activity_regularizer:施加在輸出上的正則項,為Regularizer物件
  • kernel_constraints:施加在權重上的約束項,為Constraints物件
  • bias_constraints:施加在偏置上的約束項,為Constraints物件

輸入shape
‘channels_first’模式下,輸入形如(samples,channels,rows,cols)的4D張量。
‘channels_last’模式下,輸入形如(samples,rows,cols,channels)的4D張量。

注意這裡的輸入shape指的是函式內部實現的輸入shape,而非函式介面應指定的input_shape,請參考下面提供的例子。

輸出shape
‘channels_first’模式下,為形如(samples,nb_filter, new_rows, new_cols)的4D張量。
‘channels_last’模式下,為形如(samples,new_rows, new_cols,nb_filter)的4D張量。

輸出的行列數可能會因為填充方法而改變

2.5、Conv3D層

keras.layers.convolutional.Conv3D(filters, kernel_size, strides=(1, 1, 1), padding='valid', data_format=None, dilation_rate=(1, 1, 1), activation=None, use_bias=True, kernel_initializer='glorot_uniform', bias_initializer='zeros', kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None)

三維卷積對三維的輸入進行滑動窗卷積,當使用該層作為第一層時,應提供input_shape引數。例如input_shape = (3,10,128,128)代表對10幀128*128的彩色RGB影象進行卷積。資料的通道位置仍然有data_format引數指定。

引數

  • filters:卷積核的數目(即輸出的維度)
  • kernel_size:單個整數或由3個整數構成的list/tuple,卷積核的寬度和長度。如為單個整數,則表示在各個空間維度的相同長度。
  • strides:單個整數或由3個整數構成的list/tuple,為卷積的步長。如為單個整數,則表示在各個空間維度的相同步長。任何不為1的strides均與任何不為1的dilation_rate均不相容
  • padding:補0策略,為“valid”, “same” 。“valid”代表只進行有效的卷積,即對邊界資料不處理。“same”代表保留邊界處的卷積結果,通常會導致輸出shape與輸入shape相同。
  • activation:啟用函式,為預定義的啟用函式名(參考啟用函式),或逐元素(element-wise)的Theano函式。如果不指定該引數,將不會使用任何啟用函式(即使用線性啟用函式:a(x)=x)
  • dilation_rate:單個整數或由3個個整數構成的list/tuple,指定dilated convolution中的膨脹比例。任何不為1的dilation_rate均與任何不為1的strides均不相容。
  • data_format:字串,“channels_first”或“channels_last”之一,代表資料的通道維的位置。該引數是Keras 1.x中的image_dim_ordering,“channels_last”對應原本的“tf”,“channels_first”對應原本的“th”。以128x128x128的資料為例,“channels_first”應將資料組織為(3,128,128,128),而“channels_last”應將資料組織為(128,128,128,3)。該引數的預設值是~/.keras/keras.json中設定的值,若從未設定過,則為“channels_last”。
  • use_bias:布林值,是否使用偏置項
  • kernel_initializer:權值初始化方法,為預定義初始化方法名的字串,或用於初始化權重的初始化器。參考initializers
  • bias_initializer:權值初始化方法,為預定義初始化方法名的字串,或用於初始化權重的初始化器。參考initializers
  • kernel_regularizer:施加在權重上的正則項,為Regularizer物件
  • bias_regularizer:施加在偏置向量上的正則項,為Regularizer物件
  • activity_regularizer:施加在輸出上的正則項,為Regularizer物件
  • kernel_constraints:施加在權重上的約束項,為Constraints物件
  • bias_constraints:施加在偏置上的約束項,為Constraints物件

輸入shape
‘channels_first’模式下,輸入應為形如(samples,channels,input_dim1,input_dim2, input_dim3)的5D張量
‘channels_last’模式下,輸入應為形如(samples,input_dim1,input_dim2, input_dim3,channels)的5D張量

這裡的輸入shape指的是函式內部實現的輸入shape,而非函式介面應指定的input_shape。

2.6、Cropping1D層

keras.layers.convolutional.Cropping1D(cropping=(1, 1))

在時間軸(axis1)上對1D輸入(即時間序列)進行裁剪

引數

  • cropping:長為2的tuple,指定在序列的首尾要裁剪掉多少個元素

輸入shape:形如(samples,axis_to_crop,features)的3D張量
輸出shape:形如(samples,cropped_axis,features)的3D張量。

2.7、Cropping2D層

keras.layers.convolutional.Cropping2D(cropping=((0, 0), (0, 0)), data_format=None)

對2D輸入(影象)進行裁剪,將在空域維度,即寬和高的方向上裁剪

引數

  • cropping:長為2的整數tuple,分別為寬和高方向上頭部與尾部需要裁剪掉的元素數
  • data_format:字串,“channels_first”或“channels_last”之一,代表影象的通道維的位置。該引數是Keras 1.x中的image_dim_ordering,“channels_last”對應原本的“tf”,“channels_first”對應原本的“th”。以128x128的RGB影象為例,“channels_first”應將資料組織為(3,128,128),而“channels_last”應將資料組織為(128,128,3)。該引數的預設值是~/.keras/keras.json中設定的值,若從未設定過,則為“channels_last”。

輸入shape:形如(samples,depth, first_axis_to_crop, second_axis_to_crop)
輸出shape:形如(samples, depth, first_cropped_axis, second_cropped_axis)的4D張量。

2.8、Cropping3D層

keras.layers.convolutional.Cropping3D(cropping=((1, 1), (1, 1), (1, 1)), data_format=None)

對2D輸入(影象)進行裁剪

引數

  • cropping:長為3的整數tuple,分別為三個方向上頭部與尾部需要裁剪掉的元素數
  • data_format:字串,“channels_first”或“channels_last”之一,代表資料的通道維的位置。該引數是Keras 1.x中的image_dim_ordering,“channels_last”對應原本的“tf”,“channels_first”對應原本的“th”。以128x128x128的資料為例,“channels_first”應將資料組織為(3,128,128,128),而“channels_last”應將資料組織為(128,128,128,3)。該引數的預設值是~/.keras/keras.json中設定的值,若從未設定過,則為“channels_last”。

輸入shape:形如 (samples, depth, first_axis_to_crop, second_axis_to_crop, third_axis_to_crop)的5D張量。
輸出shape:形如(samples, depth, first_cropped_axis, second_cropped_axis, third_cropped_axis)的5D張量。

2.9、UpSampling1D層

keras.layers.convolutional.UpSampling1D(size=2)

在時間軸上,將每個時間步重複length次

引數

  • size:上取樣因子

輸入shape:形如(samples,steps,features)的3D張量
輸出shape:形如(samples,upsampled_steps,features)的3D張量

3.0、UpSampling2D層

keras.layers.convolutional.UpSampling2D(size=(2, 2), data_format=None)

將資料的行和列分別重複size[0]和size[1]次

引數

  • size:整數tuple,分別為行和列上取樣因子

  • data_format:字串,“channels_first”或“channels_last”之一,代表影象的通道維的位置。該引數是Keras 1.x中的image_dim_ordering,“channels_last”對應原本的“tf”,“channels_first”對應原本的“th”。以128x128的RGB影象為例,“channels_first”應將資料組織為(3,128,128),而“channels_last”應將資料組織為(128,128,3)。該引數的預設值是~/.keras/keras.json中設定的值,若從未設定過,則為“channels_last”。

輸入shape:
‘channels_first’模式下,為形如(samples,channels, rows,cols)的4D張量。
‘channels_last’模式下,為形如(samples,rows, cols,channels)的4D張量。

輸出shape:
‘channels_first’模式下,為形如(samples,channels, upsampled_rows, upsampled_cols)的4D張量。
‘channels_last’模式下,為形如(samples,upsampled_rows, upsampled_cols,channels)的4D張量。

3.1、UpSampling3D層

keras.layers.convolutional.UpSampling3D(size=(2, 2, 2), data_format=None)

將資料的三個維度上分別重複size[0]、size[1]和ize[2]次

本層目前只能在使用Theano為後端時可用

引數

  • size:長為3的整數tuple,代表在三個維度上的上取樣因子
  • data_format:字串,“channels_first”或“channels_last”之一,代表資料的通道維的位置。該引數是Keras 1.x中的image_dim_ordering,“channels_last”對應原本的“tf”,“channels_first”對應原本的“th”。以128x128x128的資料為例,“channels_first”應將資料組織為(3,128,128,128),而“channels_last”應將資料組織為(128,128,128,3)。該引數的預設值是~/.keras/keras.json中設定的值,若從未設定過,則為“channels_last”。

輸入shape:
‘channels_first’模式下,為形如(samples, channels, len_pool_dim1, len_pool_dim2, len_pool_dim3)的5D張量
‘channels_last’模式下,為形如(samples, len_pool_dim1, len_pool_dim2, len_pool_dim3,channels, )的5D張量

輸出shape:
‘channels_first’模式下,為形如(samples, channels, dim1, dim2, dim3)的5D張量
‘channels_last’模式下,為形如(samples, upsampled_dim1, upsampled_dim2, upsampled_dim3,channels,)的5D張量。

3.2、ZeroPadding1D層

keras.layers.convolutional.ZeroPadding1D(padding=1)

對1D輸入的首尾端(如時域序列)填充0,以控制卷積以後向量的長度

引數

  • padding:整數,表示在要填充的軸的起始和結束處填充0的數目,這裡要填充的軸是軸1(第1維,第0維是樣本數)

輸入shape:形如(samples,axis_to_pad,features)的3D張量
輸出shape:形如(samples,paded_axis,features)的3D張量

3.3、ZeroPadding2D層

keras.layers.convolutional.ZeroPadding2D(padding=(1, 1), data_format=None)

對2D輸入(如圖片)的邊界填充0,以控制卷積以後特徵圖的大小

引數

  • padding:整數tuple,表示在要填充的軸的起始和結束處填充0的數目,這裡要填充的軸是軸3和軸4(即在’th’模式下影象的行和列,在‘channels_last’模式下要填充的則是軸2,3)
  • data_format:字串,“channels_first”或“channels_last”之一,代表影象的通道維的位置。該引數是Keras 1.x中的image_dim_ordering,“channels_last”對應原本的“tf”,“channels_first”對應原本的“th”。以128x128的RGB影象為例,“channels_first”應將資料組織為(3,128,128),而“channels_last”應將資料組織為(128,128,3)。該引數的預設值是~/.keras/keras.json中設定的值,若從未設定過,則為“channels_last”。

輸入shape:
‘channels_first’模式下,形如(samples,channels,first_axis_to_pad,second_axis_to_pad)的4D張量。
‘channels_last’模式下,形如(samples,first_axis_to_pad,second_axis_to_pad, channels)的4D張量。

輸出shape:
‘channels_first’模式下,形如(samples,channels,first_paded_axis,second_paded_axis)的4D張量
‘channels_last’模式下,形如(samples,first_paded_axis,second_paded_axis, channels)的4D張量

3.4、ZeroPadding3D層

keras.layers.convolutional.ZeroPadding3D(padding=(1, 1, 1), data_format=None)

將資料的三個維度上填充0

本層目前只能在使用Theano為後端時可用

引數

  • padding:整數tuple,表示在要填充的軸的起始和結束處填充0的數目,這裡要填充的軸是軸3,軸4和軸5,‘channels_last’模式下則是軸2,3和4
  • data_format:字串,“channels_first”或“channels_last”之一,代表資料的通道維的位置。該引數是Keras 1.x中的image_dim_ordering,“channels_last”對應原本的“tf”,“channels_first”對應原本的“th”。以128x128x128的資料為例,“channels_first”應將資料組織為(3,128,128,128),而“channels_last”應將資料組織為(128,128,128,3)。該引數的預設值是~/.keras/keras.json中設定的值,若從未設定過,則為“channels_last”。

輸入shape:
‘channels_first’模式下,為形如(samples, channels, first_axis_to_pad,first_axis_to_pad, first_axis_to_pad,)的5D張量。
‘channels_last’模式下,為形如(samples, first_axis_to_pad,first_axis_to_pad, first_axis_to_pad, channels)的5D張量。

輸出shape:
‘channels_first’模式下,為形如(samples, channels, first_paded_axis,second_paded_axis, third_paded_axis,)的5D張量
‘channels_last’模式下,為形如(samples, len_pool_dim1, len_pool_dim2, len_pool_dim3,channels, )的5D張量

3、池化層Pooling

3.1、MaxPooling1D層

keras.layers.pooling.MaxPooling1D(pool_size=2, strides=None, padding='valid')

對時域1D訊號進行最大值池化

引數

  • pool_size:整數,池化視窗大小
  • strides:整數或None,下采樣因子,例如設2將會使得輸出shape為輸入的一半,若為None則預設值為pool_size。
  • padding:‘valid’或者‘same’

輸入shape:形如(samples,steps,features)的3D張量
輸出shape:形如(samples,downsampled_steps,features)的3D張量

3.2、MaxPooling2D層

keras.layers.pooling.MaxPooling2D(pool_size=(2, 2), strides=None, padding='valid', data_format=None)

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

引數

  • pool_size:整數或長為2的整數tuple,代表在兩個方向(豎直,水平)上的下采樣因子,如取(2,2)將使圖片在兩個維度上均變為原長的一半。為整數意為各個維度值相同且為該數字。
  • strides:整數或長為2的整數tuple,或者None,步長值。
  • border_mode:‘valid’或者‘same’
  • data_format:字串,“channels_first”或“channels_last”之一,代表影象的通道維的位置。該引數是Keras 1.x中的image_dim_ordering,“channels_last”對應原本的“tf”,“channels_first”對應原本的“th”。以128x128的RGB影象為例,“channels_first”應將資料組織為(3,128,128),而“channels_last”應將資料組織為(128,128,3)。該引數的預設值是~/.keras/keras.json中設定的值,若從未設定過,則為“channels_last”。

輸入shape
‘channels_first’模式下,為形如(samples,channels, rows,cols)的4D張量
‘channels_last’模式下,為形如(samples,rows, cols,channels)的4D張量

輸出shape
‘channels_first’模式下,為形如(samples,channels, pooled_rows, pooled_cols)的4D張量
‘channels_last’模式下,為形如(samples,pooled_rows, pooled_cols,channels)的4D張量

3.3、MaxPooling3D層

keras.layers.pooling.MaxPooling3D(pool_size=(2, 2, 2), strides=None, padding='valid', data_format=None)

為3D訊號(空域或時空域)施加最大值池化。本層目前只能在使用Theano為後端時可用

引數

  • pool_size:整數或長為3的整數tuple,代表在三個維度上的下采樣因子,如取(2,2,2)將使訊號在每個維度都變為原來的一半長。
  • strides:整數或長為3的整數tuple,或者None,步長值。
  • padding:‘valid’或者‘same’
  • data_format:字串,“channels_first”或“channels_last”之一,代表資料的通道維的位置。該引數是Keras 1.x中的image_dim_ordering,“channels_last”對應原本的“tf”,“channels_first”對應原本的“th”。以128x128x128的資料為例,“channels_first”應將資料組織為(3,128,128,128),而“channels_last”應將資料組織為(128,128,128,3)。該引數的預設值是~/.keras/keras.json中設定的值,若從未設定過,則為“channels_last”。

輸入shape
‘channels_first’模式下,為形如(samples, channels, len_pool_dim1, len_pool_dim2, len_pool_dim3)的5D張量
‘channels_last’模式下,為形如(samples, len_pool_dim1, len_pool_dim2, len_pool_dim3,channels, )的5D張量

輸出shape
‘channels_first’模式下,為形如(samples, channels, pooled_dim1, pooled_dim2, pooled_dim3)的5D張量
‘channels_last’模式下,為形如(samples, pooled_dim1, pooled_dim2, pooled_dim3,channels,)的5D張量

3.4、AveragePooling1D層

keras.layers.pooling.AveragePooling1D(pool_size=2, strides=None, padding='valid')

對時域1D訊號進行平均值池化

引數

  • pool_size:整數,池化視窗大小
  • strides:整數或None,下采樣因子,例如設2將會使得輸出shape為輸入的一半,若為None則預設值為pool_size。
  • padding:‘valid’或者‘same’

輸入shape:形如(samples,steps,features)的3D張量
輸出shape:形如(samples,downsampled_steps,features)的3D張量

3.5、AveragePooling2D層

keras.layers.pooling.AveragePooling2D(pool_size=(2, 2), strides=None, padding='valid', data_format=None)

為空域訊號施加平均值池化

引數

  • pool_size:整數或長為2的整數tuple,代表在兩個方向(豎直,水平)上的下采樣因子,如取(2,2)將使圖片在兩個維度上均變為原長的一半。為整數意為各個維度值相同且為該數字。
  • strides:整數或長為2的整數tuple,或者None,步長值。
  • border_mode:‘valid’或者‘same’
  • data_format:字串,“channels_first”或“channels_last”之一,代表影象的通道維的位置。該引數是Keras 1.x中的image_dim_ordering,“channels_last”對應原本的“tf”,“channels_first”對應原本的“th”。以128x128的RGB影象為例,“channels_first”應將資料組織為(3,128,128),而“channels_last”應將資料組織為(128,128,3)。該引數的預設值是~/.keras/keras.json中設定的值,若從未設定過,則為“channels_last”。

輸入shape
‘channels_first’模式下,為形如(samples,channels, rows,cols)的4D張量。
‘channels_last’模式下,為形如(samples,rows, cols,channels)的4D張量。

輸出shape
‘channels_first’模式下,為形如(samples,channels, pooled_rows, pooled_cols)的4D張量。
‘channels_last’模式下,為形如(samples,pooled_rows, pooled_cols,channels)的4D張量。

3.6、AveragePooling3D層

keras.layers.pooling.AveragePooling3D(pool_size=(2, 2, 2), strides=None, padding='valid', data_format=None)

為3D訊號(空域或時空域)施加平均值池化。本層目前只能在使用Theano為後端時可用

引數

  • pool_size:整數或長為3的整數tuple,代表在三個維度上的下采樣因子,如取(2,2,2)將使訊號在每個維度都變為原來的一半長。
  • strides:整數或長為3的整數tuple,或者None,步長值。
  • padding:‘valid’或者‘same’
  • data_format:字串,“channels_first”或“channels_last”之一,代表資料的通道維的位置。該引數是Keras 1.x中的image_dim_ordering,“channels_last”對應原本的“tf”,“channels_first”對應原本的“th”。以128x128x128的資料為例,“channels_first”應將資料組織為(3,128,128,128),而“channels_last”應將資料組織為(128,128,128,3)。該引數的預設值是~/.keras/keras.json中設定的值,若從未設定過,則為“channels_last”。

輸入shape:
‘channels_first’模式下,為形如(samples, channels, len_pool_dim1, len_pool_dim2, len_pool_dim3)的5D張量
‘channels_last’模式下,為形如(samples, len_pool_dim1, len_pool_dim2, len_pool_dim3,channels, )的5D張量

輸出shape:
‘channels_first’模式下,為形如(samples, channels, pooled_dim1, pooled_dim2, pooled_dim3)的5D張量
‘channels_last’模式下,為形如(samples, pooled_dim1, pooled_dim2, pooled_dim3,channels,)的5D張量

3.7、GlobalMaxPooling1D層

keras.layers.pooling.GlobalMaxPooling1D()

對於時間訊號的全域性最大池化

輸入shape:形如(samples,steps,features)的3D張量。
輸出shape:形如(samples, features)的2D張量。

3.8、GlobalAveragePooling1D層

keras.layers.pooling.GlobalAveragePooling1D()

為時域訊號施加全域性平均值池化

輸入shape:形如(samples,steps,features)的3D張量
輸出shape:形如(samples, features)的2D張量

3.9、GlobalMaxPooling2D層

keras.layers.pooling.GlobalMaxPooling2D(dim_ordering='default')

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

引數

  • data_format:字串,“channels_first”或“channels_last”之一,代表影象的通道維的位置。該引數是Keras
    1.x中的image_dim_ordering,“channels_last”對應原本的“tf”,“channels_first”對應原本的“th”。以128x128的RGB影象為例,“channels_first”應將資料組織為(3,128,128),而“channels_last”應將資料組織為(128,128,3)。該引數的預設值是~/.keras/keras.json中設定的值,若從未設定過,則為“channels_last”。

輸入shape:
‘channels_first’模式下,為形如(samples,channels, rows,cols)的4D張量
‘channels_last’模式下,為形如(samples,rows, cols,channels)的4D張量

輸出shape:形如(nb_samples, channels)的2D張量

3.10、GlobalAveragePooling2D層

keras.layers.pooling.GlobalAveragePooling2D(dim_ordering='default')

為空域訊號施加全域性平均值池化

引數

  • data_format:字串,“channels_first”或“channels_last”之一,代表影象的通道維的位置。該引數是Keras
    1.x中的image_dim_ordering,“channels_last”對應原本的“tf”,“channels_first”對應原本的“th”。以128x128的RGB影象為例,“channels_first”應將資料組織為(3,128,128),而“channels_last”應將資料組織為(128,128,3)。該引數的預設值是~/.keras/keras.json中設定的值,若從未設定過,則為“channels_last”。

輸入shape:
‘channels_first’模式下,為形如(samples,channels, rows,cols)的4D張量
‘channels_last’模式下,為形如(samples,rows, cols,channels)的4D張量

輸出shape:形如(nb_samples, channels)的2D張量

4、區域性連線層LocallyConnceted

4、迴圈層Recurrent

2.4、遞迴層(Recurrent)

遞迴層包含三種模型:LSTM、GRU和SimpleRNN

2.4.1抽象層,不能直接使用

keras.layers.recurrent.Recurrent(weights=None, return_sequences=False, go_backwards=False, stateful=False, unroll=False, consume_less='cpu', input_dim=None, input_length=None)

return_sequences:True返回整個序列,false返回輸出序列的最後一個輸出

go_backwards:True,逆向處理輸入序列,預設為False

stateful:布林值,預設為False,若為True,則一個batch中下標為i的樣本的最終狀態將會用作下一個batch同樣下標的樣本的初始狀態

2.4.2、全連線RNN網路

keras.layers.recurrent.SimpleRNN(output_dim, init='glorot_uniform', inner_init='orthogonal', activation='tanh', W_regularizer=None, U_regularizer=None, b_regularizer=None, dropout_W=0.0, dropout_U=0.0)

inner_init:內部單元的初始化方法

dropout_W:0~1之間的浮點數,控制輸入單元到輸入門的連線斷開比例

dropout_U:0~1之間的浮點數,控制輸入單元到遞迴連線的斷開比例

2.4.3、LSTM層

keras.layers.recurrent.LSTM(output_dim, init='glorot_uniform', inner_init='orthogonal', forget_bias_init='one', activation='tanh', inner_activation='hard_sigmoid', W_regularizer=None, U_regularizer=None, b_regularizer=None, dropout_W=0.0, dropout_U=0.0)

forget_bias_init:遺忘門偏置的初始化函式,Jozefowicz et al.建議初始化為全1元素

inner_activation:內部單元啟用函式

嵌入層 Embedding

2.5 Embedding層

keras.layers.embeddings.Embedding(input_dim, output_dim, init='uniform', input_length=None, W_regularizer=None, activity_regularizer=None, W_constraint=None, mask_zero=False, weights=None, dropout=0.0)

只能作為模型第一層

mask_zero:布林值,確定是否將輸入中的‘0’看作是應該被忽略的‘填充’(padding)值,該引數在使用遞迴層處理變長輸入時有用。設定為True的話,模型中後續的層必須都支援masking,否則會丟擲異常

Merge層

網路模型

網路模型可以將上面定義了各種基本網路層組合起來。

Keras有兩種型別的模型,序貫模型(Sequential)和函式式模型(Model),函式式模型應用更為廣泛,序貫模型是函式式模型的一種特殊情況。

兩類模型有一些方法是相同的:

model的方法:

model.summary() : 打印出模型概況,它實際呼叫的是keras.utils.print_summary

model.get_config() :返回包含模型配置資訊的Python字典

model = Model.from_config(config) 模型從它的config資訊中重構回去
model = Sequential.from_config(config) 模型從它的config資訊中重構回去

model.get_weights():返回模型權重張量的列表,型別為numpy array

model.set_weights():從numpy array裡將權過載入給模型

model.to_json:返回代表模型的JSON字串,僅包含網路結構,不包含權值。可以從JSON字串中重構原模型:

from models import model_from_json

json_string = model.to_json()
model = model_from_json(json_string)

model.to_yaml:與model.to_json類似,同樣可以從產生的YAML字串中重構模型

from models import model_from_yaml

yaml_string = model.to_yaml()
model = model_from_yaml(yaml_string)

model.save_weights(filepath):將模型權重儲存到指定路徑,檔案型別是HDF5(字尾是.h5)

model.load_weights(filepath, by_name=False):從HDF5檔案中載入權重到當前模型中, 預設情況下模型的結構將保持不變。如果想將權過載入不同的模型(有些層相同)中,則設定by_name=True,只有名字匹配的層才會載入權重

keras有兩種model,分別是Sequential模型和泛型模型

2.1 Sequential模型

Sequential是多個網路層的線性堆疊

可以通過向Sequential模型傳遞一個layer的list來構造該模型:

from keras.models import Sequential
from keras.layers import Dense, Activation

model = Sequential([
Dense(32, input_dim=784),
Activation('relu'),
Dense(10),
Activation('softmax'),
])

也可以通過.add()方法一個個的將layer加入模型中:

model = Sequential()
model.add(Dense(32, input_dim=784))
model.add(Activation('relu'))

還可以通過merge將兩個Sequential模型通過某種方式合併

Sequential模型的方法:

compile(self, optimizer, loss, metrics=[], sample_weight_mode=None)

fit(self, x, y, batch_size=32, nb_epoch=10, verbose=1, callbacks=[], validation_split=0.0, validation_data=None, shuffle=True, class_weight=None, sample_weight=None)

evaluate(self, x, y, batch_size=32, verbose=1, sample_weight=None)

#按batch獲得輸入資料對應的輸出,函式的返回值是預測值的numpy array
predict(self, x, batch_size=32, verbose=0)

#按batch產生輸入資料的類別預測結果,函式的返回值是類別預測結果的numpy array或numpy
predict_classes(self, x, batch_size=32, verbose=1)

#本函式按batch產生輸入資料屬於各個類別的概率,函式的返回值是類別概率的numpy array
predict_proba(self, x, batch_size=32, verbose=1)

train_on_batch(self, x, y, class_weight=None, sample_weight=None)

test_on_batch(self, x, y, sample_weight=None)

predict_on_batch(self, x)


fit_generator(self, generator, samples_per_epoch, nb_epoch, verbose=1, callbacks=[], validation_data=None, nb_val_samples=None, class_weight=None, max_q_size=10)

evaluate_generator(self, generator, val_samples, max_q_size=10)

2.2 泛型模型

Keras泛型模型介面是:

使用者定義多輸出模型、非迴圈有向模型或具有共享層的模型等複雜模型的途徑

適用於實現:全連線網路和多輸入多輸出模型

多輸入多輸出,官方例子給出:預測一條新聞的點贊轉發數,主要輸入是新聞本身,還可以加入額外輸入,比如新聞釋出日期,新聞作者等,具體的實現還是看官網文件吧:
http://keras-cn.readthedocs.io/en/latest/getting_started/functional_API/

所以感覺這個模型可以針對特定task搞一些創新哦

泛型模型model的屬性:

model.layers:組成模型圖的各個層
model.inputs:模型的輸入張量列表
model.outputs:模型的輸出張量列表

方法:類似序列模型的方法
補充get_layer

get_layer(self, name=None, index=None)
本函式依據模型中層的下標或名字獲得層物件,泛型模型中層的下標依據自底向上,水平遍歷的順序。

name:字串,層的名字
index: 整數,層的下標
函式的返回值是層物件

from keras.models import Model
from keras.layers import Input, Dense

a = Input(shape=(32,))
b = Dense(32)(a)
model = Model(inputs=a, outputs=b)