Keras 深度学习框架方法及参数

Keras是python中基于Theano、CNTK等为计算后台的深度学习建模环境,相对于其他的深度学习框架,如tensorflow,theano,Caffe等,Keras具有其显著的优点,如,支持CNN,RNN等算法。大大地加快了开发的速度。本文主要介绍Keras的相关使用参数。

核心层

  1. 全连接层:神经网络中最常用到的,实现对神经网络中神经元的激活。
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参数。
  1. Activation层
    激活层对一个层的输出是假激活函数。
keras.layers.core.Activation(activation)
  • activation:将要使用的激活函数,为预定义激活函数名或一个Tensorflow/Theano的函数。
  1. Dropout层
    为输入数据施加Dropout。Dropout将在训练过程中每次更新参数时随机断开一定比例§的输入神经元连接,Dropout层用于防止过拟合。
keras.layer.core.Dropout(p)
  • p: 0-1的浮点数,控制需要断开的连接的比例。
  1. Flatten层
    Flatten层用来将输入压缩,即把多为的输入一维化,常用在从卷积层到全连接层的过度。Flatten不影响batch的大小。
keras.layer.core.Flatten()
  1. Reshape层
    Reshape层用来将输入shape转换为特定的shape
keras.layer.core.Reshape(target_shape)
  • target_shape:目标shape,为整数的tuple,不包含样本数目的维度(batch大小)
  1. 卷积层
    卷积操作可以分为一维,二维,三维,分别为Conv1D,Conv2D,Conv3D。一维卷积主要应用于以时间序列数据或文本数据,二维数据通常应用于图像数据。由于这三种的使用和参数基本相同,所以主要以二维的Conv2D进行说明。
  • 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’。
  • 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. 池化层
    与卷积层一样,最大统计量池化和平均统计量池化也有三种,分别为MaxPooling1D、MaxPooling2D、MaxPooling3D和AveragePooling1D、AveragePooling2D、AveragePooling3D,由于使用和参数基本相同,所以主要以MaxPooling2D进行说明。
  • 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.convolutional.MaxPooling2D(pool_size=(2, 2), strides=None, border_mode='valid', dim_ordering='th')
  • 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参数时有意义。

  1. 循环层
    循环神经网络中的RNN、LSTM和GRU都继承本层,所以该父类的参数同样使用于对应的子类SimpleRNN、LSTM和GRU。
Recurrent(return_sequences=False)
  • return_sequences:控制返回的类型,“False”返回输出序列的最后一个输出,“True”则返回整个序列。当我们要搭建多层神经网络(如深层LSTM)时,若不是最后一层,则需要将该参数设为True。
  1. 嵌入层
    该层只能用在模型的第一层,是将所有索引标号的稀疏矩阵映射到致密的低维矩阵。如我们对文本数据进行处理时,我们对每个词编号后,我们希望将词编号变成词向量就可以使用嵌入层。
Embedding(input_dim, output_dim, input_length)
  • input_dim:大于或等于0的整数,字典的长度即输入数据的个数。
  • output_dim:输出的维度,如词向量的维度。
  • input_length:当输入序列的长度为固定时为该长度,然后要在该层后加上Flatten层,然后再加上Dense层,则必须指定该参数,否则Dense层无法自动推断输出的维度。

该层可能有点费解,举个例子,当我们有一个文本,该文本有100句话,我们已经通过一系列操作,使得文本变成一个(100,32)矩阵,每行代表一句话,每个元素代表一个词,我们希望将该词变为64维的词向量:
Embedding(100, 64, input_length=32)
则输出的矩阵的shape变为(100, 32, 64):即每个词已经变成一个64维的词向量。

猜你喜欢

转载自blog.csdn.net/weixin_43265998/article/details/89134335
今日推荐