一、網絡層
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)