相关链接请阅读原文访问。
keras.layers.convolutional.MaxPooling1D(pool_length=2, stride=None, border_mode='valid')
对时域1D信号进行最大值池化
keras.layers.convolutional.MaxPooling2D(pool_size=(2, 2), strides=None, border_mode='valid', dim_ordering='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'。‘th’模式下,为形如(samples,channels, rows,cols)的4D张量
‘tf’模式下,为形如(samples,rows, cols,channels)的4D张量
‘th’模式下,为形如(samples,channels, pooled_rows, pooled_cols)的4D张量
‘tf’模式下,为形如(samples,pooled_rows, pooled_cols,channels)的4D张量
keras.layers.convolutional.MaxPooling3D(pool_size=(2, 2, 2), strides=None, border_mode='valid', dim_ordering='th')
为3D信号(空域或时空域)施加最大值池化
本层目前只能在使用Theano为后端时可用
image_dim_ordering
指定的模式,可在~/.keras/keras.json
中查看,若没有设置过则为'tf'。‘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张量
‘th’模式下,为形如(samples, channels, pooled_dim1, pooled_dim2, pooled_dim3)的5D张量
‘tf’模式下,为形如(samples, pooled_dim1, pooled_dim2, pooled_dim3,channels,)的5D张量
keras.layers.convolutional.AveragePooling1D(pool_length=2, stride=None, border_mode='valid')
对时域1D信号进行平均值池化
keras.layers.convolutional.AveragePooling2D(pool_size=(2, 2), strides=None, border_mode='valid', dim_ordering='th')
为空域信号施加平均值池化
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'。
‘th’模式下,为形如(samples,channels, rows,cols)的4D张量
‘tf’模式下,为形如(samples,rows, cols,channels)的4D张量
‘th’模式下,为形如(samples,channels, pooled_rows, pooled_cols)的4D张量
‘tf’模式下,为形如(samples,pooled_rows, pooled_cols,channels)的4D张量
keras.layers.convolutional.AveragePooling3D(pool_size=(2, 2, 2), strides=None, border_mode='valid', dim_ordering='th')
为3D信号(空域或时空域)施加平均值池化
本层目前只能在使用Theano为后端时可用
image_dim_ordering
指定的模式,可在~/.keras/keras.json
中查看,若没有设置过则为'tf'。‘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张量
‘th’模式下,为形如(samples, channels, pooled_dim1, pooled_dim2, pooled_dim3)的5D张量
‘tf’模式下,为形如(samples, pooled_dim1, pooled_dim2, pooled_dim3,channels,)的5D张量
keras.layers.pooling.GlobalMaxPooling1D()
对于时间信号的全局最大池化
keras.layers.pooling.GlobalAveragePooling1D()
为时域信号施加全局平均值池化
keras.layers.pooling.GlobalMaxPooling2D(dim_ordering='default')
为空域信号施加全局最大值池化
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'。‘th’模式下,为形如(samples,channels, rows,cols)的4D张量
‘tf’模式下,为形如(samples,rows, cols,channels)的4D张量
形如(nb_samples, channels)的2D张量
keras.layers.pooling.GlobalAveragePooling2D(dim_ordering='default')
为空域信号施加全局平均值池化
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'。‘th’模式下,为形如(samples,channels, rows,cols)的4D张量
‘tf’模式下,为形如(samples,rows, cols,channels)的4D张量
形如(nb_samples, channels)的2D张量
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
weights
参数时有意义。input_shape
参数。Flatten
层,然后又要连接Dense
层时,需要指定该参数,否则全连接的输出无法计算出来。形如(samples,steps,input_dim)的3D张量
形如(samples,new_steps,nb_filter)的3D张量,因为有向量填充的原因,steps
的值会改变
# 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)
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
weights
参数时有意义。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'。‘th’模式下,输入形如(samples,channels,rows,cols)的4D张量
‘tf’模式下,输入形如(samples,rows,cols,channels)的4D张量
注意这里的输入shape指的是函数内部实现的输入shape,而非函数接口应指定的input_shape
,请参考下面提供的例子。
‘th’模式下,为形如(samples,nb_filter, new_rows, new_cols)的4D张量
‘tf’模式下,为形如(samples,new_rows, new_cols,nb_filter)的4D张量
输出的行列数可能会因为填充方法而改变
# 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)
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
)都服从本层的性质,并接受本层指定的所有关键字参数。
[(input_dim, output_dim),(output_dim, output_dim),(output_dim,)]
False
,控制返回类型。若为True
则返回整个序列,否则仅返回输出序列的最后一个输出False
,若为True
,则逆向处理输入序列False
,若为True
,则一个batch中下标为i的样本的最终状态将会用作下一个batch同样下标的样本的初始状态。False
,若为True
,则递归层将被展开,否则就使用符号化的循环。当使用TensorFlow为后端时,递归网络本来就是展开的,因此该层不做任何事情。层展开会占用更多的内存,但会加速RNN的运算。层展开只适用于短序列。Flatten
层,然后又要连接Dense
层时,需要指定该参数,否则全连接的输出无法计算出来。注意,如果递归层不是网络的第一层,你需要在网络的第一层中指定序列的长度,如通过input_shape
指定。形如(samples,timesteps,input_dim)的3D张量
如果return_sequences=True
:返回形如(samples,timesteps,output_dim)的3D张量
否则,返回形如(samples,output_dim)的2D张量
# 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,如果想将输入数据的一部分屏蔽掉,请使用Embedding层并将参数mask_zero
设为True
。
目前为止,当使用TensorFlow作为后端时,序列的时间步数目必须在网络中指定。通过input_length
(如果网络首层是递归层)或完整的input_shape
来指定该值。
可以将RNN设置为‘stateful’,意味着训练时每个batch的状态都会被重用于初始化下一个batch的初始状态。状态RNN假设连续的两个batch之中,相同下标的元素有一一映射关系。
要启用状态RNN,请在实例化层对象时指定参数stateful=True
,并指定模型使用固定大小的batch:通过在模型的第一层传入batch_input_shape=(...)
来实现。该参数应为包含batch大小的元组,例如(32,10,100)代表每个batch的大小是32.
如果要将递归层的状态重置,请调用.reset_states()
,对模型调用将重置模型中所有状态RNN的状态。对单个层调用则只重置该层的状态。
当使用TensorFlow作为后端时,如果要在递归层使用dropout,需要同上面所述的一样指定好固定的batch大小
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的输出会被回馈到输入
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)
门限递归单元(详见参考文献)
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长短期记忆模型,关于此算法的详情,请参考本教程
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层只能作为模型的第一层
weights
参数时有意义。True
的话,模型中后续的层必须都支持masking,否则会抛出异常Flatten
层,然后接Dense
层,则必须指定该参数,否则Dense
层的输出维度无法自动推断。形如(samples,sequence_length)的2D张量
形如(samples, sequence_length, output_dim)的3D张量
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
任意,当使用该层为模型首层时需指定input_shape
参数
与输入相同
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相同的可学习的参数向量。
任意,当使用该层为模型首层时需指定input_shape
参数
与输入相同
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
任意,当使用该层为模型首层时需指定input_shape
参数
与输入相同
keras.layers.advanced_activations.ParametricSoftplus(alpha_init=0.2, beta_init=5.0, weights=None)
该层是参数化的Softplus,表达式是:f(x) = alpha * log(1 + exp(beta * x))
任意,当使用该层为模型首层时需指定input_shape
参数
与输入相同
keras.layers.advanced_activations.ThresholdedReLU(theta=1.0)
该层是带有门限的ReLU,表达式是:f(x) = x for x > theta
,f(x) = 0 otherwise
任意,当使用该层为模型首层时需指定input_shape
参数
与输入相同
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
任意,当使用该层为模型首层时需指定input_shape
参数
与输入相同