Keras学习笔记III-网络层

1. 常用层

常用层对应于core模块

  • Dense层

    常用的全连接层

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    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的整数,代表该层的输出维度。
    # activation:激活函数,为预定义的激活函数名(参考激活函数),或逐元素(element-wise)的Theano函数。如果不指定该参数,将不会使用任何激活函数(即使用线性激活函数:a(x)=x)
    # use_bias: 布尔值,是否使用偏置项
    # kernel_initializer:权值初始化方法,为预定义初始化方法名的字符串,或用于初始化权重的初始化器。参考initializers
    # bias_initializer:权值初始化方法,为预定义初始化方法名的字符串,或用于初始化权重的初始化器。参考initializers
    # kernel_regularizer:施加在权重上的正则项,为Regularizer对象
    # bias_regularizer:施加在偏置向量上的正则项,为Regularizer对象
    # activity_regularizer:施加在输出上的正则项,为Regularizer对象
    # kernel_constraints:施加在权重上的约束项,为Constraints对象
    # bias_constraints:施加在偏置上的约束项,为Constraints对象
  • Activation层

    激活层对一个层的输出施加激活函数

    1
    2
    3
    4
    keras.layers.core.Activation(activation)

    # 参数
    # activation:将要使用的激活函数
  • Dropout层

    Dropout将在训练过程中每次更新参数时随机断开一定百分比的输入神经元,Dropout层用于防止过拟合

    1
    2
    3
    4
    5
    6
    keras.layers.core.Dropout(rate, noise_shape=None, seed=None)

    # 参数
    # rate:0~1的浮点数,控制需要断开的神经元的比例
    # noise_shape:整数张量,为将要应用在输入上的二值Dropout mask的shape,例如你的输入为(batch_size, timesteps,features),并且你希望在各个时间步上的Dropout mask都相同,则可传入noise_shape=(batch_size,1,features)。
    # seed:整数,使用的随机数种子
  • Flatten层

    Flatten层用来将输入“压平”,即把多维的输入一维化,常用在从卷积层到全连接层的过度。Flatten不影响batch的大小。

    1
    keras.layers.core.Flatten()

2. 卷积层Convolutional

  • Conv2D层

    二维卷积层,即对图像的空域卷积。该层对二维输入进行滑动窗卷积,当使用该层作为第一层时,应提供input_shape参数。例如input_shape = (128,128,3)代表128*128的彩色RGB图像(data_format='channels_last'

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    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)

    # 参数

    # filters:卷积核的数目(即输出的维度)
    # kernel_size:单个整数或由两个整数构成的list/tuple,卷积核的宽度和长度。如为单个整数,则表示在各个空间维度的相同长度。
    # strides:单个整数或由两个整数构成的list/tuple,为卷积的步长。如为单个整数,则表示在各个空间维度的相同步长。任何不为1的strides均与任何不为1的dilation_rata均不兼容
    # padding:补0策略,为“valid”, “same” 。“valid”代表只进行有效的卷积,即对边界数据不处理。“same”代表保留边界处的卷积结果,通常会导致输出shape与输入shape相同。
    # activation:激活函数,为预定义的激活函数名(参考激活函数),或逐元素(element-wise)的Theano函数。如果不指定该参数,将不会使用任何激活函数(即使用线性激活函数:a(x)=x)
    # dilation_rate:单个整数或由两个个整数构成的list/tuple,指定dilated convolution中的膨胀比例。任何不为1的dilation_rata均与任何不为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对象
  • Cropping2D层

    对2D输入(图像)进行裁剪,将在空域维度,即宽和高的方向上裁剪

    1
    2
    3
    4
    5
    6
    keras.layers.convolutional.Cropping2D(cropping=((0, 0), (0, 0)), data_format=None)

    # 参数

    # 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”。
  • UpSampling2D层

    将数据的行和列分别重复size[0]和size[1]次

    1
    2
    3
    4
    5
    6
    keras.layers.convolutional.UpSampling2D(size=(2,2), data_format=None)

    # 参数

    # 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”。
  • ZeroPadding2D层

    对2D输入(如图片)的边界填充0,以控制卷积以后特征图的大小

    1
    2
    3
    4
    5
    6
    keras.layers.convolutional.ZeroPadding2D(padding=(1,1), data_format=None)

    # 参数

    # 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”。

3. 池化层Pooling

  • MaxPooling2D层

    为空域信号施加最大值池化

    1
    2
    3
    4
    5
    6
    7
    8
    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”。
  • AveragePooling2D层

    1
    2
    3
    4
    5
    6
    7
    8
    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”。
  • GlobalMaxPooling2D层

    为空域信号施加全局最大值池化

    1
    2
    3
    4
    5
    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”。
  • GlobalAveragePooling2D层

    为空域信号施加全局平均值池化

    1
    2
    3
    4
    5
    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”。

4. 循环层Recurrent

  • SimpleRNN层

    全连接RNN网络,RNN的输出会被回馈到输入

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    keras.layers.recurrent.SimpleRNN(units, activation='tanh', use_bias=True, kernel_initializer='glorot_uniform', recurrent_initializer='orthogonal', bias_initializer='zeros', kernel_regularizer=None, recurrent_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, recurrent_constraint=None, bias_constraint=None, dropout=0.0, recurrent_dropout=0.0)

    # 参数

    # units:输出维度
    # activation:激活函数,为预定义的激活函数名(参考激活函数)
    # use_bias: 布尔值,是否使用偏置项
    # kernel_initializer:权值初始化方法,为预定义初始化方法名的字符串,或用于初始化权重的初始化器。参考initializers
    # recurrent_initializer:循环核的初始化方法,为预定义初始化方法名的字符串,或用于初始化权重的初始化器。参考initializers
    # bias_initializer:权值初始化方法,为预定义初始化方法名的字符串,或用于初始化权重的初始化器。参考initializers
    # kernel_regularizer:施加在权重上的正则项,为Regularizer对象
    # bias_regularizer:施加在偏置向量上的正则项,为Regularizer对象
    # recurrent_regularizer:施加在循环核上的正则项,为Regularizer对象
    # activity_regularizer:施加在输出上的正则项,为Regularizer对象
    # kernel_constraints:施加在权重上的约束项,为Constraints对象
    # recurrent_constraints:施加在循环核上的约束项,为Constraints对象
    # bias_constraints:施加在偏置上的约束项,为Constraints对象
    # dropout:0~1之间的浮点数,控制输入线性变换的神经元断开比例
    # recurrent_dropout:0~1之间的浮点数,控制循环状态的线性变换的神经元断开比例
  • GRU层

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    keras.layers.recurrent.GRU(units, activation='tanh', recurrent_activation='hard_sigmoid', use_bias=True, kernel_initializer='glorot_uniform', recurrent_initializer='orthogonal', bias_initializer='zeros', kernel_regularizer=None, recurrent_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, recurrent_constraint=None, bias_constraint=None, dropout=0.0, recurrent_dropout=0.0)

    # 参数

    # units:输出维度
    # activation:激活函数,为预定义的激活函数名(参考激活函数)
    # use_bias: 布尔值,是否使用偏置项
    # kernel_initializer:权值初始化方法,为预定义初始化方法名的字符串,或用于初始化权重的初始化器。参考initializers
    # recurrent_initializer:循环核的初始化方法,为预定义初始化方法名的字符串,或用于初始化权重的初始化器。参考initializers
    # bias_initializer:权值初始化方法,为预定义初始化方法名的字符串,或用于初始化权重的初始化器。参考initializers
    # kernel_regularizer:施加在权重上的正则项,为Regularizer对象
    # bias_regularizer:施加在偏置向量上的正则项,为Regularizer对象
    # recurrent_regularizer:施加在循环核上的正则项,为Regularizer对象
    # activity_regularizer:施加在输出上的正则项,为Regularizer对象
    # kernel_constraints:施加在权重上的约束项,为Constraints对象
    # recurrent_constraints:施加在循环核上的约束项,为Constraints对象
    # bias_constraints:施加在偏置上的约束项,为Constraints对象
    # dropout:0~1之间的浮点数,控制输入线性变换的神经元断开比例
    # recurrent_dropout:0~1之间的浮点数,控制循环状态的线性变换的神经元断开比例
  • LSTM层

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    keras.layers.recurrent.LSTM(units, activation='tanh', recurrent_activation='hard_sigmoid', use_bias=True, kernel_initializer='glorot_uniform', recurrent_initializer='orthogonal', bias_initializer='zeros', unit_forget_bias=True, kernel_regularizer=None, recurrent_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, recurrent_constraint=None, bias_constraint=None, dropout=0.0, recurrent_dropout=0.0)

    # 参数

    # units:输出维度
    # activation:激活函数,为预定义的激活函数名(参考激活函数)
    # recurrent_activation: 为循环步施加的激活函数(参考激活函数)
    # use_bias: 布尔值,是否使用偏置项
    # kernel_initializer:权值初始化方法,为预定义初始化方法名的字符串,或用于初始化权重的初始化器。参考initializers
    # recurrent_initializer:循环核的初始化方法,为预定义初始化方法名的字符串,或用于初始化权重的初始化器。参考initializers
    # bias_initializer:权值初始化方法,为预定义初始化方法名的字符串,或用于初始化权重的初始化器。参考initializers
    # kernel_regularizer:施加在权重上的正则项,为Regularizer对象
    # bias_regularizer:施加在偏置向量上的正则项,为Regularizer对象
    # recurrent_regularizer:施加在循环核上的正则项,为Regularizer对象
    # activity_regularizer:施加在输出上的正则项,为Regularizer对象
    # kernel_constraints:施加在权重上的约束项,为Constraints对象
    # recurrent_constraints:施加在循环核上的约束项,为Constraints对象
    # bias_constraints:施加在偏置上的约束项,为Constraints对象
    # dropout:0~1之间的浮点数,控制输入线性变换的神经元断开比例
    # recurrent_dropout:0~1之间的浮点数,控制循环状态的线性变换的神经元断开比例

5. 规范层BatchNormalization

  • BatchNormalization层

    该层在每个batch上将前一层的激活值重新规范化,即使得其输出数据的均值接近0,其标准差接近1.

    BN层的作用:

    1. 加速收敛
    2. 控制过拟合,可以少用或不用Dropout和正则
    3. 降低网络对初始化权重不敏感
    4. 允许使用较大的学习率
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    keras.layers.normalization.BatchNormalization(axis=-1, momentum=0.99, epsilon=0.001, center=True, scale=True, beta_initializer='zeros', gamma_initializer='ones', moving_mean_initializer='zeros', moving_variance_initializer='ones', beta_regularizer=None, gamma_regularizer=None, beta_constraint=None, gamma_constraint=None)

    # 参数

    # axis: 整数,指定要规范化的轴,通常为特征轴。例如在进行data_format="channels_first的2D卷积后,一般会设axis=1。
    # momentum: 动态均值的动量
    # epsilon:大于0的小浮点数,用于防止除0错误
    # center: 若设为True,将会将beta作为偏置加上去,否则忽略参数beta
    # scale: 若设为True,则会乘以gamma,否则不使用gamma。当下一层是线性的时,可以设False,因为scaling的操作将被下一层执行。
    # beta_initializer:beta权重的初始方法
    # gamma_initializer: gamma的初始化方法
    # moving_mean_initializer: 动态均值的初始化方法
    # moving_variance_initializer: 动态方差的初始化方法
    # beta_regularizer: 可选的beta正则
    # gamma_regularizer: 可选的gamma正则
    # beta_constraint: 可选的beta约束
    # gamma_constraint: 可选的gamma约束