相关链接请阅读原文访问。
池化层
MaxPooling1D层
代码语言:javascript复制keras.layers.convolutional.MaxPooling1D(pool_length=2, stride=None, border_mode='valid')
对时域1D信号进行最大值池化
参数
- pool_length:下采样因子,如取2则将输入下采样到一半长度
- stride:整数或None,步长值
- border_mode:‘valid’或者‘same’
- 注意,目前‘same’模式只能在TensorFlow作为后端时使用
输入shape
- 形如(samples,steps,features)的3D张量
输出shape
- 形如(samples,downsampled_steps,features)的3D张量
MaxPooling2D层
代码语言:javascript复制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,步长值。
- border_mode:‘valid’或者‘same’
- 注意,目前‘same’模式只能在TensorFlow作为后端时使用
- 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'。
输入shape
‘th’模式下,为形如(samples,channels, rows,cols)的4D张量
‘tf’模式下,为形如(samples,rows, cols,channels)的4D张量
输出shape
‘th’模式下,为形如(samples,channels, pooled_rows, pooled_cols)的4D张量
‘tf’模式下,为形如(samples,pooled_rows, pooled_cols,channels)的4D张量
MaxPooling3D层
代码语言:javascript复制keras.layers.convolutional.MaxPooling3D(pool_size=(2, 2, 2), strides=None, border_mode='valid', dim_ordering='th')
为3D信号(空域或时空域)施加最大值池化
本层目前只能在使用Theano为后端时可用
参数
- pool_size:长为3的整数tuple,代表在三个维度上的下采样因子,如取(2,2,2)将使信号在每个维度都变为原来的一半长。
- strides:长为3的整数tuple,或者None,步长值。
- border_mode:‘valid’或者‘same’
- dim_ordering:‘th’或‘tf’。‘th’模式中通道维(如彩色图像的3通道)位于第1个位置(维度从0开始算),而在‘tf’模式中,通道维位于第4个位置。默认是
image_dim_ordering
指定的模式,可在~/.keras/keras.json
中查看,若没有设置过则为'tf'。
输入shape
‘th’模式下,为形如(samples, channels, len_pool_dim1, len_pool_dim2, len_pool_dim3)的5D张量
‘tf’模式下,为形如(samples, len_pool_dim1, len_pool_dim2, len_pool_dim3,channels, )的5D张量
输出shape
‘th’模式下,为形如(samples, channels, pooled_dim1, pooled_dim2, pooled_dim3)的5D张量
‘tf’模式下,为形如(samples, pooled_dim1, pooled_dim2, pooled_dim3,channels,)的5D张量
AveragePooling1D层
代码语言:javascript复制keras.layers.convolutional.AveragePooling1D(pool_length=2, stride=None, border_mode='valid')
对时域1D信号进行平均值池化
参数
- pool_length:下采样因子,如取2则将输入下采样到一半长度
- stride:整数或None,步长值
- border_mode:‘valid’或者‘same’
- 注意,目前‘same’模式只能在TensorFlow作为后端时使用
输入shape
- 形如(samples,steps,features)的3D张量
输出shape
- 形如(samples,downsampled_steps,features)的3D张量
AveragePooling2D层
代码语言:javascript复制keras.layers.convolutional.AveragePooling2D(pool_size=(2, 2), strides=None, border_mode='valid', dim_ordering='th')
为空域信号施加平均值池化
参数
- pool_size:长为2的整数tuple,代表在两个方向(竖直,水平)上的下采样因子,如取(2,2)将使图片在两个维度上均变为原长的一半
- strides:长为2的整数tuple,或者None,步长值。
- border_mode:‘valid’或者‘same’
- 注意,目前‘same’模式只能在TensorFlow作为后端时使用
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'。
输入shape
‘th’模式下,为形如(samples,channels, rows,cols)的4D张量
‘tf’模式下,为形如(samples,rows, cols,channels)的4D张量
输出shape
‘th’模式下,为形如(samples,channels, pooled_rows, pooled_cols)的4D张量
‘tf’模式下,为形如(samples,pooled_rows, pooled_cols,channels)的4D张量
AveragePooling3D层
代码语言:javascript复制keras.layers.convolutional.AveragePooling3D(pool_size=(2, 2, 2), strides=None, border_mode='valid', dim_ordering='th')
为3D信号(空域或时空域)施加平均值池化
本层目前只能在使用Theano为后端时可用
参数
- pool_size:长为3的整数tuple,代表在三个维度上的下采样因子,如取(2,2,2)将使信号在每个维度都变为原来的一半长。
- strides:长为3的整数tuple,或者None,步长值。
- border_mode:‘valid’或者‘same’
- dim_ordering:dim_ordering:‘th’或‘tf’。‘th’模式中通道维(如彩色图像的3通道)位于第1个位置(维度从0开始算),而在‘tf’模式中,通道维位于第4个位置。默认是
image_dim_ordering
指定的模式,可在~/.keras/keras.json
中查看,若没有设置过则为'tf'。
输入shape
‘th’模式下,为形如(samples, channels, len_pool_dim1, len_pool_dim2, len_pool_dim3)的5D张量
‘tf’模式下,为形如(samples, len_pool_dim1, len_pool_dim2, len_pool_dim3,channels, )的5D张量
输出shape
‘th’模式下,为形如(samples, channels, pooled_dim1, pooled_dim2, pooled_dim3)的5D张量
‘tf’模式下,为形如(samples, pooled_dim1, pooled_dim2, pooled_dim3,channels,)的5D张量
GlobalMaxPooling1D层
代码语言:javascript复制keras.layers.pooling.GlobalMaxPooling1D()
对于时间信号的全局最大池化
输入shape
- 形如(samples,steps,features)的3D张量
输出shape
- 形如(samples, features)的2D张量
GlobalAveragePooling1D层
代码语言:javascript复制keras.layers.pooling.GlobalAveragePooling1D()
为时域信号施加全局平均值池化
输入shape
- 形如(samples,steps,features)的3D张量
输出shape
- 形如(samples, features)的2D张量
GlobalMaxPooling2D层
代码语言:javascript复制keras.layers.pooling.GlobalMaxPooling2D(dim_ordering='default')
为空域信号施加全局最大值池化
参数
- 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'。
输入shape
‘th’模式下,为形如(samples,channels, rows,cols)的4D张量
‘tf’模式下,为形如(samples,rows, cols,channels)的4D张量
输出shape
形如(nb_samples, channels)的2D张量
GlobalAveragePooling2D层
代码语言:javascript复制keras.layers.pooling.GlobalAveragePooling2D(dim_ordering='default')
为空域信号施加全局平均值池化
参数
- 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'。
输入shape
‘th’模式下,为形如(samples,channels, rows,cols)的4D张量
‘tf’模式下,为形如(samples,rows, cols,channels)的4D张量
输出shape
形如(nb_samples, channels)的2D张量
局部连接层LocallyConnceted
LocallyConnected1D层
代码语言:javascript复制keras.layers.local.LocallyConnected1D(nb_filter, filter_length, init='uniform', activation='linear', weights=None, border_mode='valid', subsample_length=1, W_regularizer=None, b_regularizer=None, activity_regularizer=None, W_constraint=None, b_constraint=None, bias=True, input_dim=None, input_length=None)
LocallyConnected1D
层与Convolution1D
工作方式类似,唯一的区别是不进行权值共享。即施加在不同输入patch的滤波器是不一样的,当使用该层作为模型首层时,需要提供参数input_dim
或input_shape
参数。参数含义参考Convolution1D
。注意该层的input_shape
必须完全指定,不支持None
参数
- nb_filter:卷积核的数目(即输出的维度)
- filter_length:卷积核的空域或时域长度
- init:初始化方法,为预定义初始化方法名的字符串,或用于初始化权重的Theano函数。该参数仅在不传递
weights
参数时有意义。 - activation:激活函数,为预定义的激活函数名(参考激活函数),或逐元素(element-wise)的Theano函数。如果不指定该参数,将不会使用任何激活函数(即使用线性激活函数:a(x)=x)
- weights:权值,为numpy array的list。该list应含有一个形如(input_dim,output_dim)的权重矩阵和一个形如(output_dim,)的偏置向量。
- border_mode:边界模式,为“valid”或“same”
- subsample_length:输出对输入的下采样因子
- W_regularizer:施加在权重上的正则项,为WeightRegularizer对象
- b_regularizer:施加在偏置向量上的正则项,为WeightRegularizer对象
- activity_regularizer:施加在输出上的正则项,为ActivityRegularizer对象
- W_constraints:施加在权重上的约束项,为Constraints对象
- b_constraints:施加在偏置上的约束项,为Constraints对象
- bias:布尔值,是否包含偏置向量(即层对输入做线性变换还是仿射变换)
- input_dim:整数,输入数据的维度。当该层作为网络的第一层时,必须指定该参数或
input_shape
参数。 - input_length:当输入序列的长度固定时,该参数为输入序列的长度。当需要在该层后连接
Flatten
层,然后又要连接Dense
层时,需要指定该参数,否则全连接的输出无法计算出来。
输入shape
形如(samples,steps,input_dim)的3D张量
输出shape
形如(samples,new_steps,nb_filter)的3D张量,因为有向量填充的原因,steps
的值会改变
例子
代码语言:javascript复制# apply a unshared weight convolution 1d of length 3 to a sequence with# 10 timesteps, with 64 output filtersmodel = Sequential()
model.add(LocallyConnected1D(64, 3, input_shape=(10, 32)))# now model.output_shape == (None, 8, 64)# add a new conv1d on topmodel.add(LocallyConnected1D(32, 3))# now model.output_shape == (None, 6, 32)
LocallyConnected2D层
代码语言:javascript复制keras.layers.local.LocallyConnected2D(nb_filter, nb_row, nb_col, init='glorot_uniform', activation='linear', weights=None, border_mode='valid', subsample=(1, 1), dim_ordering='default', W_regularizer=None, b_regularizer=None, activity_regularizer=None, W_constraint=None, b_constraint=None, bias=True)
LocallyConnected2D
层与Convolution2D
工作方式类似,唯一的区别是不进行权值共享。即施加在不同输入patch的滤波器是不一样的,当使用该层作为模型首层时,需要提供参数input_dim
或input_shape
参数。参数含义参考Convolution2D
。注意该层的input_shape
必须完全指定,不支持None
参数
- nb_filter:卷积核的数目
- nb_row:卷积核的行数
- nb_col:卷积核的列数
- init:初始化方法,为预定义初始化方法名的字符串,或用于初始化权重的Theano函数。该参数仅在不传递
weights
参数时有意义。 - activation:激活函数,为预定义的激活函数名(参考激活函数),或逐元素(element-wise)的Theano函数。如果不指定该参数,将不会使用任何激活函数(即使用线性激活函数:a(x)=x)
- weights:权值,为numpy array的list。该list应含有一个形如(input_dim,output_dim)的权重矩阵和一个形如(output_dim,)的偏置向量。
- border_mode:边界模式,为“valid”或“same”
- subsample:长为2的tuple,输出对输入的下采样因子,更普遍的称呼是“strides”
- W_regularizer:施加在权重上的正则项,为WeightRegularizer对象
- b_regularizer:施加在偏置向量上的正则项,为WeightRegularizer对象
- activity_regularizer:施加在输出上的正则项,为ActivityRegularizer对象
- W_constraints:施加在权重上的约束项,为Constraints对象
- b_constraints:施加在偏置上的约束项,为Constraints对象
- 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'。 - bias:布尔值,是否包含偏置向量(即层对输入做线性变换还是仿射变换)
输入shape
‘th’模式下,输入形如(samples,channels,rows,cols)的4D张量
‘tf’模式下,输入形如(samples,rows,cols,channels)的4D张量
注意这里的输入shape指的是函数内部实现的输入shape,而非函数接口应指定的input_shape
,请参考下面提供的例子。
输出shape
‘th’模式下,为形如(samples,nb_filter, new_rows, new_cols)的4D张量
‘tf’模式下,为形如(samples,new_rows, new_cols,nb_filter)的4D张量
输出的行列数可能会因为填充方法而改变
例子
代码语言:javascript复制# apply a 3x3 unshared weights convolution with 64 output filters on a 32x32 image:model = Sequential()
model.add(LocallyConnected2D(64, 3, 3, input_shape=(3, 32, 32)))# now model.output_shape == (None, 64, 30, 30)# notice that this layer will consume (30*30)*(3*3*3*64) (30*30)*64 parameters# add a 3x3 unshared weights convolution on top, with 32 output filters:model.add(LocallyConnected2D(32, 3, 3))# now model.output_shape == (None, 32, 28, 28)
递归层Recurrent
Recurrent层
代码语言:javascript复制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)
这是递归层的抽象类,请不要在模型中直接应用该层(因为它是抽象类,无法实例化任何对象)。请使用它的子类LSTM
或SimpleRNN
。
所有的递归层(LSTM
,GRU
,SimpleRNN
)都服从本层的性质,并接受本层指定的所有关键字参数。
参数
- weights:numpy array的list,用以初始化权重。该list形如
[(input_dim, output_dim),(output_dim, output_dim),(output_dim,)]
- return_sequences:布尔值,默认
False
,控制返回类型。若为True
则返回整个序列,否则仅返回输出序列的最后一个输出 - go_backwards:布尔值,默认为
False
,若为True
,则逆向处理输入序列 - stateful:布尔值,默认为
False
,若为True
,则一个batch中下标为i的样本的最终状态将会用作下一个batch同样下标的样本的初始状态。 - unroll:布尔值,默认为
False
,若为True
,则递归层将被展开,否则就使用符号化的循环。当使用TensorFlow为后端时,递归网络本来就是展开的,因此该层不做任何事情。层展开会占用更多的内存,但会加速RNN的运算。层展开只适用于短序列。 - consume_less:‘cpu’或‘mem’之一。若设为‘cpu’,则RNN将使用较少、较大的矩阵乘法来实现,从而在CPU上会运行更快,但会更消耗内存。如果设为‘mem’,则RNN将会较多的小矩阵乘法来实现,从而在GPU并行计算时会运行更快(但在CPU上慢),并占用较少内存。
- input_dim:输入维度,当使用该层为模型首层时,应指定该值(或等价的指定input_shape)
- input_length:当输入序列的长度固定时,该参数为输入序列的长度。当需要在该层后连接
Flatten
层,然后又要连接Dense
层时,需要指定该参数,否则全连接的输出无法计算出来。注意,如果递归层不是网络的第一层,你需要在网络的第一层中指定序列的长度,如通过input_shape
指定。
输入shape
形如(samples,timesteps,input_dim)的3D张量
输出shape
如果return_sequences=True
:返回形如(samples,timesteps,output_dim)的3D张量
否则,返回形如(samples,output_dim)的2D张量
例子
代码语言:javascript复制# as the first layer in a Sequential modelmodel = Sequential()
model.add(LSTM(32, input_shape=(10, 64)))# now model.output_shape == (None, 10, 32)# note: `None` is the batch dimension.# the following is identical:model = Sequential()
model.add(LSTM(32, input_dim=64, input_length=10))# for subsequent layers, not need to specify the input size:model.add(LSTM(16))
屏蔽输入数据(Masking)
递归层支持通过时间步变量对输入数据进行Masking,如果想将输入数据的一部分屏蔽掉,请使用Embedding层并将参数mask_zero
设为True
。
TensorFlow警告
目前为止,当使用TensorFlow作为后端时,序列的时间步数目必须在网络中指定。通过input_length
(如果网络首层是递归层)或完整的input_shape
来指定该值。
使用状态RNN的注意事项
可以将RNN设置为‘stateful’,意味着训练时每个batch的状态都会被重用于初始化下一个batch的初始状态。状态RNN假设连续的两个batch之中,相同下标的元素有一一映射关系。
要启用状态RNN,请在实例化层对象时指定参数stateful=True
,并指定模型使用固定大小的batch:通过在模型的第一层传入batch_input_shape=(...)
来实现。该参数应为包含batch大小的元组,例如(32,10,100)代表每个batch的大小是32.
如果要将递归层的状态重置,请调用.reset_states()
,对模型调用将重置模型中所有状态RNN的状态。对单个层调用则只重置该层的状态。
以TensorFlow作为后端时使用dropout的注意事项
当使用TensorFlow作为后端时,如果要在递归层使用dropout,需要同上面所述的一样指定好固定的batch大小
SimpleRNN层
代码语言:javascript复制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)
全连接RNN网络,RNN的输出会被回馈到输入
参数
- output_dim:内部投影和输出的维度
- init:初始化方法,为预定义初始化方法名的字符串,或用于初始化权重的Theano函数。
- inner_init:内部单元的初始化方法
- activation:激活函数,为预定义的激活函数名(参考激活函数)
- W_regularizer:施加在权重上的正则项,为WeightRegularizer对象
- U_regularizer:施加在递归权重上的正则项,为WeightRegularizer对象
- b_regularizer:施加在偏置向量上的正则项,为WeightRegularizer对象
- dropout_W:0~1之间的浮点数,控制输入单元到输入门的连接断开比例
- dropout_U:0~1之间的浮点数,控制输入单元到递归连接的断开比例
参考文献
- A Theoretically Grounded Application of Dropout in Recurrent Neural Networks
GRU层
代码语言:javascript复制keras.layers.recurrent.GRU(output_dim, init='glorot_uniform', inner_init='orthogonal', activation='tanh', inner_activation='hard_sigmoid', W_regularizer=None, U_regularizer=None, b_regularizer=None, dropout_W=0.0, dropout_U=0.0)
门限递归单元(详见参考文献)
参数
- output_dim:内部投影和输出的维度
- init:初始化方法,为预定义初始化方法名的字符串,或用于初始化权重的Theano函数。
- inner_init:内部单元的初始化方法
- activation:激活函数,为预定义的激活函数名(参考激活函数)
- inner_activation:内部单元激活函数
- W_regularizer:施加在权重上的正则项,为WeightRegularizer对象
- U_regularizer:施加在递归权重上的正则项,为WeightRegularizer对象
- b_regularizer:施加在偏置向量上的正则项,为WeightRegularizer对象
- dropout_W:0~1之间的浮点数,控制输入单元到输入门的连接断开比例
- dropout_U:0~1之间的浮点数,控制输入单元到递归连接的断开比例
参考文献
- On the Properties of Neural Machine Translation: Encoder–Decoder Approaches
- Empirical Evaluation of Gated Recurrent Neural Networks on Sequence Modeling
- A Theoretically Grounded Application of Dropout in Recurrent Neural Networks
LSTM层
代码语言:javascript复制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)
Keras长短期记忆模型,关于此算法的详情,请参考本教程
参数
- output_dim:内部投影和输出的维度
- init:初始化方法,为预定义初始化方法名的字符串,或用于初始化权重的Theano函数。
- inner_init:内部单元的初始化方法
- forget_bias_init:遗忘门偏置的初始化函数,Jozefowicz et al.建议初始化为全1元素
- activation:激活函数,为预定义的激活函数名(参考激活函数)
- inner_activation:内部单元激活函数
- W_regularizer:施加在权重上的正则项,为WeightRegularizer对象
- U_regularizer:施加在递归权重上的正则项,为WeightRegularizer对象
- b_regularizer:施加在偏置向量上的正则项,为WeightRegularizer对象
- dropout_W:0~1之间的浮点数,控制输入单元到输入门的连接断开比例
- dropout_U:0~1之间的浮点数,控制输入单元到递归连接的断开比例
参考文献
- Long short-term memory (original 1997 paper)
- Learning to forget: Continual prediction with LSTM
- Supervised sequence labelling with recurrent neural networks
- A Theoretically Grounded Application of Dropout in Recurrent Neural Networks
嵌入层 Embedding
Embedding层
代码语言:javascript复制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)
嵌入层将正整数(下标)转换为具有固定大小的向量,如[[4],[20]]->[[0.25,0.1],[0.6,-0.2]]
Embedding层只能作为模型的第一层
参数
- input_dim:大或等于0的整数,字典长度,即输入数据最大下标 1
- output_dim:大于0的整数,代表全连接嵌入的维度
- init:初始化方法,为预定义初始化方法名的字符串,或用于初始化权重的Theano函数。该参数仅在不传递
weights
参数时有意义。 - activation:激活函数,为预定义的激活函数名(参考激活函数),或逐元素(element-wise)的Theano函数。如果不指定该参数,将不会使用任何激活函数(即使用线性激活函数:a(x)=x)
- weights:权值,为numpy array的list。该list应仅含有一个如(input_dim,output_dim)的权重矩阵
- W_regularizer:施加在权重上的正则项,为WeightRegularizer对象
- W_constraints:施加在权重上的约束项,为Constraints对象
- mask_zero:布尔值,确定是否将输入中的‘0’看作是应该被忽略的‘填充’(padding)值,该参数在使用递归层处理变长输入时有用。设置为
True
的话,模型中后续的层必须都支持masking,否则会抛出异常 - input_length:当输入序列的长度固定时,该值为其长度。如果要在该层后接
Flatten
层,然后接Dense
层,则必须指定该参数,否则Dense
层的输出维度无法自动推断。 - dropout:0~1的浮点数,代表要断开的嵌入比例,
输入shape
形如(samples,sequence_length)的2D张量
输出shape
形如(samples, sequence_length, output_dim)的3D张量
参考文献
- A Theoretically Grounded Application of Dropout in Recurrent Neural Networks
高级激活层Advanced Activation
LeakyReLU层
代码语言:javascript复制keras.layers.advanced_activations.LeakyReLU(alpha=0.3)
LeakyRelU是修正线性单元(Rectified Linear Unit,ReLU)的特殊版本,当不激活时,LeakyReLU仍然会有非零输出值,从而获得一个小梯度,避免ReLU可能出现的神经元“死亡”现象。即,f(x)=alpha * x for x < 0
, f(x) = x for x>=0
参数
- alpha:大于0的浮点数,代表激活函数图像中第三象限线段的斜率
输入shape
任意,当使用该层为模型首层时需指定input_shape
参数
输出shape
与输入相同
PReLU层
代码语言:javascript复制keras.layers.advanced_activations.PReLU(init='zero', weights=None)
该层为参数化的ReLU(Parametric ReLU),表达式是:f(x) = alpha * x for x < 0
,f(x) = x for x>=0
,此处的alpha
为一个与xshape相同的可学习的参数向量。
参数
- init:alpha的初始化函数
- weights:alpha的初始化值,为具有单个numpy array的list
输入shape
任意,当使用该层为模型首层时需指定input_shape
参数
输出shape
与输入相同
参考文献
- Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification
ELU层
代码语言:javascript复制keras.layers.advanced_activations.ELU(alpha=1.0)
ELU层是指数线性单元(Exponential Linera Unit),表达式为: 该层为参数化的ReLU(Parametric ReLU),表达式是:f(x) = alpha * (exp(x) - 1.) for x < 0
, f(x) = x for x>=0
参数
- alpha:控制负因子的参数
输入shape
任意,当使用该层为模型首层时需指定input_shape
参数
输出shape
与输入相同
参考文献
- Fast and Accurate Deep Network Learning by Exponential Linear Units (ELUs)
ParametricSoftplus层
代码语言:javascript复制keras.layers.advanced_activations.ParametricSoftplus(alpha_init=0.2, beta_init=5.0, weights=None)
该层是参数化的Softplus,表达式是:f(x) = alpha * log(1 exp(beta * x))
参数
- alpha_init:浮点数,alpha的初始值
- beta_init:浮点数,beta的初始值
- weights:初始化权重,为含有两个numpy array的list
输入shape
任意,当使用该层为模型首层时需指定input_shape
参数
输出shape
与输入相同
参考文献
- Inferring Nonlinear Neuronal Computation Based on Physiologically Plausible Inputs
ThresholdedReLU层
代码语言:javascript复制keras.layers.advanced_activations.ThresholdedReLU(theta=1.0)
该层是带有门限的ReLU,表达式是:f(x) = x for x > theta
,f(x) = 0 otherwise
参数
- theata:大或等于0的浮点数,激活门限位置
输入shape
任意,当使用该层为模型首层时需指定input_shape
参数
输出shape
与输入相同
参考文献
- Zero-Bias Autoencoders and the Benefits of Co-Adapting Features
SReLU层
代码语言:javascript复制keras.layers.advanced_activations.SReLU(t_left_init='zero', a_left_init='glorot_uniform', t_right_init='glorot_uniform', a_right_init='one')
该层是S形的ReLU
参数
- t_left_init:左侧截断初始化函数
- a_left_init:左侧斜率初始化函数
- t_right_init:右侧截断初始化函数
- a_right_init:右侧斜率初始化函数
输入shape
任意,当使用该层为模型首层时需指定input_shape
参数
输出shape
与输入相同
参考文献
- Deep Learning with S-shaped Rectified Linear Activation Units