keras常用的网络层
一、常用层
常用层对应于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,其中:
- i:输入的size(rows或cols)
- k:卷积核大小(nb_filter)
- s: 步长(subsample)
- 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:
- 0:按特征规范化,输入的各个特征图将独立被规范化。规范化的轴由参数axis指定。注意,如果输入是形如(samples,channels,rows,cols)的4D图像张量,则应设置规范化的轴为1,即沿着通道轴规范化。输入格式是‘tf’同理。
- 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参数时有意义。