Deep learning基於theano的keras學習筆記(3)-網路層
1. 常用層
1.1 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)
1.2 Activation層
keras.layers.core.Activation(activation)
1.3 Dropout層
為輸入資料施加Dropout。Dropout將在訓練過程中每次更新引數時隨機斷開一定百分比(p)的輸入神經元連線,Dropout層用於防止過擬合。
keras.layers.core.Dropout(p)#p:0~1的浮點數,控制需要斷開的連結的比例
1.4 SpatialDropout2D(3D)層
與Dropout的作用類似,但它斷開的是整個2D(3D)特徵圖,而不是單個神經元。如果一張特徵圖的相鄰畫素之間有很強的相關性(通常發生在低層的卷積層中),那麼普通的dropout無法正則化其輸出,否則就會導致明顯的學習率下降。這種情況下,SpatialDropout2D(3D)能夠幫助提高特徵圖之間的獨立性,應該用其取代普通的Dropout
keras.layers.core.SpatialDropout2D(p, dim_ordering='default')
#p:0~1的浮點數,控制需要斷開的連結的比例;dim_ordering:'th'或'tf'
#預設為~/.keras/keras.json配置的image_dim_ordering值
1.5 Flatten層
Flatten層用來將輸入“壓平”,即把多維的輸入一維化,常用在從卷積層到全連線層的過渡。Flatten不影響batch的大小。
keras.layers.core.Flatten()
1.6 Reshape層
Reshape層用來將輸入shape轉換為特定的shape
keras.layers.core.Reshape(target_shape)
#target_shape:目標shape,為整數的tuple,不包含樣本數目的維度(batch大小)
1.7 Permute層
Permute層將輸入的維度按照給定模式進行重排,例如,當需要將RNN和CNN網路連線時,可能會用到該層。
keras.layers.core.Permute(dims)
#dims:整數tuple,指定重排的模式,不包含樣本數的維度。重拍模式的下標從1開始。
#例如(2,1)代表將輸入的第二個維度重拍到輸出的第一個維度,而將輸入的第一個維度重排到第二個維度
1.8 RepeatVector層
RepeatVector層將輸入重複n次
keras.layers.core.RepeatVector(n)
1.9 Merge層
Merge層根據給定的模式,將一個張量列表中的若干張量合併為一個單獨的張量
keras.engine.topology.Merge(layers=None, mode='sum', concat_axis=-1, dot_axes=-1,output_shape=None,
node_indices=None, tensor_indices=None, name=None)
#mode方式有“sum”,“mul”,“concat”,“ave”,“cos”,“dot”
1.10 Lambda層
本函式用以對上一層的輸出施以任何Theano/TensorFlow表示式
keras.layers.core.Lambda(function, output_shape=None, arguments={})
#例子:model.add(Lambda(lambda x: x ** 2))
1.11 ActivityRegularizer層
經過本層的資料不會有任何變化,但會基於其啟用值更新損失函式值
keras.layers.core.ActivityRegularization(l1=0.0, l2=0.0)
#l1:1範數正則因子(正浮點數);l2:2範數正則因子(正浮點數)
1.12 Masking層
使用給定的值對輸入的序列訊號進行“遮蔽”,用以定位需要跳過的時間步
keras.layers.core.Masking(mask_value=0.0)
#考慮輸入資料x是一個形如(samples,timesteps,features)的張量,現將其送入LSTM層。
#因為你缺少時間步為3和5的訊號,所以你希望將其掩蓋。這時候應該:賦值x[:,3,:] = 0.,x[:,5,:] = 0.
#在LSTM層之前插入mask_value=0.的Masking層
model = Sequential()
model.add(Masking(mask_value=0., input_shape=(timesteps, features)))
model.add(LSTM(32))
1.13 Highway層
Highway層建立全連線的Highway網路,這是LSTM在前饋神經網路
keras.layers.core.Highway(init='glorot_uniform', transform_bias=-2, activation='linear', weights=None,
W_regularizer=None, b_regularizer=None, activity_regularizer=None,
W_constraint=None, b_constraint=None, bias=True, input_dim=None)
1.14 MaxoutDense層
MaxoutDense層以nb_features個Dense(input_dim,output_dim)
線性層的輸出的最大值為輸出。MaxoutDense可對輸入學習出一個凸的、分段線性的啟用函式。
2. 卷積層
2.1 Convolution1D層
一維卷積層,用以在一維輸入訊號上進行領域濾波。當使用該層作為首層時,需要提供關鍵字引數input_dim
或input_shape
。例如input_dim=128
長為128的向量序列輸入,而input_shape=(10,128)
代表一個長為10的128向量序列
keras.layers.convolutional.Convolution1D(nb_filter, filter_length, init='uniform',
activation='linear', weights=None, border_mode='valid',
subsample_length=1, W_constraint=None, b_constraint=None,
bias=True, input_dim=None, input_length=None)
2.2 AtrousConvolution1D層
AtrousConvolution1D層用於對1D訊號進行濾波,是膨脹/帶孔洞的卷積。當使用該層作為首層時,需要提供關鍵字引數input_dim
或input_shape
。例如input_dim=128
長為128的向量序列輸入,而input_shape=(10,128)
代表一個長為10的128向量序列
keras.layers.convolutional.AtrousConvolution1D(nb_filter, filter_length, init='uniform', activation='linear',
weights=None, border_mode='valid', subsample_length=1,
activity_regularizer=None, W_constraint=None, b_constraint=None, bias=True)
2.3 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)
2.4 AtrousConvolution2D層
該層對二維輸入進行Atrous卷積,也即膨脹卷積或帶孔洞的卷積。當使用該層作為第一層時,應提供input_shape
引數。例如input_shape = (3,128,128)
代表128*128的彩色RGB影象
keras.layers.convolutional.AtrousConvolution2D(nb_filter, nb_row, nb_col, init='glorot_uniform',
activation='linear', weights=None, border_mode='valid',
subsample=(1, 1), atrous_rate=(1, 1), dim_ordering='th',
W_regularizer=None, b_regularizer=None, activity_regularizer=None,
W_constraint=None, b_constraint=None, bias=True)
2.5 SeparableConvolution2D層
該層是對2D輸入的可分離卷積。可分離卷積首先按深度方向進行卷積(對每個輸入通道分別卷積),然後逐點進行卷積,將上一步的卷積結果混合到輸出通道中。引數`depth_multiplier`控制了在`depthwise`卷積(第一步)的過程中,每個輸入通道訊號產生多少個輸出通道。直觀來說,可分離卷積可以看做講一個卷積核分解為兩個小的卷積核,或看作`Inception`模組的一種極端情況。當使用該層作為第一層時,應提供`input_shape`引數。例如`input_shape = (3,128,128)`代表128*128的彩色RGB影象
keras.layers.convolutional.SeparableConvolution2D(nb_filter, nb_row, nb_col, init='glorot_uniform',
activation='linear', weights=None, border_mode='valid',
subsample=(1, 1), depth_multiplier=1, dim_ordering='default',
depthwise_regularizer=None, pointwise_regularizer=None,
b_regularizer=None,activity_regularizer=None, epthwise_constraint=None,
pointwise_constraint=None, b_constraint=None, bias=True)
2.6 Deconvolution2D層
該層是卷積操作的轉置(反捲積)。需要反捲積的情況通常發生在使用者想要對一個普通卷積的結果做反方向的變換。例如,將具有該卷積層輸出shape的tensor轉換為具有該卷積層輸入shape的tensor。,同時保留與卷積層相容的連線模式。當使用該層作為第一層時,應提供`input_shape`引數。例如`input_shape = (3,128,128)`代表128*128的彩色RGB影象
keras.layers.convolutional.Deconvolution2D(nb_filter, nb_row, nb_col, output_shape, init='glorot_uniform',
activation='linear', weights=None, border_mode='valid',
b_regularizer=None, ctivity_regularizer=None,
W_constraint=None, b_constraint=None, bias=True)
2.7 Convolution3D層
三維卷積對三維的輸入進行滑動窗卷積,當使用該層作為第一層時,應提供input_shape
引數。例如input_shape = (3,10,128,128)
代表對10幀128*128的彩色RGB影象進行卷積。目前,該層僅僅在使用Theano作為後端時可用
keras.layers.convolutional.Convolution3D(nb_filter, kernel_dim1, kernel_dim2, kernel_dim3, init='glorot_uniform',
activation='linear', weights=None, border_mode='valid',
subsample=(1, 1, 1), dim_ordering='th', W_regularizer=None,
b_regularizer=None, activity_regularizer=None, W_constraint=None,
b_constraint=None, bias=True)
2.8 Cropping層
#Cropping1D層
keras.layers.convolutional.Cropping1D(cropping=(1, 1))
#在時間軸(axis1)上對1D輸入(即時間序列)進行裁剪
#Cropping2D層
keras.layers.convolutional.Cropping2D(cropping=((0, 0), (0, 0)), dim_ordering='default')
#對2D輸入(影象)進行裁剪,將在空域維度,即寬和高的方向上裁剪
#Cropping3D層
keras.layers.convolutional.Cropping3D(cropping=((1, 1), (1, 1), (1, 1)), dim_ordering='default')
#對2D輸入(影象)進行裁剪
2.9 UpSampling層
#UpSampling1D層
keras.layers.convolutional.UpSampling1D(length=2)
#在時間軸上,將每個時間步重複length次
#UpSampling2D層
keras.layers.convolutional.UpSampling2D(size=(2, 2), dim_ordering='th')
#將資料的行和列分別重複size[0]和size[1]次
UpSampling3D層
keras.layers.convolutional.UpSampling3D(size=(2, 2, 2), dim_ordering='th')
#將資料的三個維度上分別重複size[0]、size[1]和ize[2]次
#本層目前只能在使用Theano為後端時可用
2.10 ZeroPadding層
#ZeroPadding1D層
keras.layers.convolutional.ZeroPadding1D(padding=1)
#對1D輸入的首尾端(如時域序列)填充0,以控制卷積以後向量的長度
#ZeroPadding2D層
keras.layers.convolutional.ZeroPadding2D(padding=(1, 1), dim_ordering='th')
#對2D輸入(如圖片)的邊界填充0,以控制卷積以後特徵圖的大小
#ZeroPadding3D層
keras.layers.convolutional.ZeroPadding3D(padding=(1, 1, 1), dim_ordering='th')
#將資料的三個維度上填充0
#本層目前只能在使用Theano為後端時可用