循环层Recurrent

Recurrent层

keras.layers.recurrent.Recurrent(return_sequences=False, go_backwards=False, stateful=False, unroll=False, implementation=0)

这是循环层的抽象类,请不要在模型中直接应用该层(因为它是抽象类,无法实例化任何对象)。请使用它的子类LSTMGRUSimpleRNN

所有的循环层(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的运算。层展开只适用于短序列。

  • implementation:0,1或2, 若为0,则RNN将以更少但是更大的矩阵乘法实现,因此在CPU上运行更快,但消耗更多的内存。如果设为1,则RNN将以更多但更小的矩阵乘法实现,因此在CPU上运行更慢,在GPU上运行更快,并且消耗更少的内存。如果设为2(仅LSTM和GRU可以设为2),则RNN将把输入门、遗忘门和输出门合并为单个矩阵,以获得更加在GPU上更加高效的实现。注意,RNN dropout必须在所有门上共享,并导致正则效果性能微弱降低。

  • 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张量

例子

# as the first layer in a Sequential model
model = Sequential()
model.add(LSTM(32, input_shape=(10, 64)))
# now model.output_shape == (None, 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, no need to specify the input size:model.add(LSTM(16))# to stack recurrent layers, you must use return_sequences=True
# on any recurrent layer that feeds into another recurrent layer.
# note that you only need to specify the input size on the first layer.
model = Sequential()
model.add(LSTM(64, input_dim=64, input_length=10, return_sequences=True))
model.add(LSTM(32, return_sequences=True))
model.add(LSTM(10))

指定RNN初始状态的注意事项

可以通过设置initial_state用符号式的方式指定RNN层的初始状态。即,initial_stat的值应该为一个tensor或一个tensor列表,代表RNN层的初始状态。

也可以通过设置reset_states参数用数值的方法设置RNN的初始状态,状态的值应该为numpy数组或numpy数组的列表,代表RNN层的初始状态。

屏蔽输入数据(Masking)

循环层支持通过时间步变量对输入数据进行Masking,如果想将输入数据的一部分屏蔽掉,请使用Embedding层并将参数mask_zero设为True

使用状态RNN的注意事项

可以将RNN设置为‘stateful’,意味着由每个batch计算出的状态都会被重用于初始化下一个batch的初始状态。状态RNN假设连续的两个batch之中,相同下标的元素有一一映射关系。

要启用状态RNN,请在实例化层对象时指定参数stateful=True,并在Sequential模型使用固定大小的batch:通过在模型的第一层传入batch_size=(...)input_shape来实现。在函数式模型中,对所有的输入都要指定相同的batch_size

如果要将循环层的状态重置,请调用.reset_states(),对模型调用将重置模型中所有状态RNN的状态。对单个层调用则只重置该层的状态。


SimpleRNN层

keras.layers.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, implementation=1, return_sequences=False, return_state=False, go_backwards=False, stateful=False, unroll=False)

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

参数

  • 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之间的浮点数,控制循环状态的线性变换的神经元断开比例

  • 其他参数参考Recurrent的说明

参考文献

  • A Theoretically Grounded Application of Dropout in Recurrent Neural Networks

GRU层

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之间的浮点数,控制循环状态的线性变换的神经元断开比例

  • 其他参数参考Recurrent的说明

参考文献

  • 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层

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)

Keras长短期记忆模型,关于此算法的详情,请参考本教程

参数

  • 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之间的浮点数,控制循环状态的线性变换的神经元断开比例

  • 其他参数参考Recurrent的说明

参考文献

  • 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

ConvLSTM2D层

keras.layers.ConvLSTM2D(filters, kernel_size, strides=(1, 1), padding='valid', data_format=None, dilation_rate=(1, 1), 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, return_sequences=False, go_backwards=False, stateful=False, dropout=0.0, recurrent_dropout=0.0)

ConvLSTM2D是一个LSTM网络,但它的输入变换和循环变换是通过卷积实现的

参数

  • filters: 整数,输出的维度,该参数含义同普通卷积层的filters
  • kernel_size: 整数或含有n个整数的tuple/list,指定卷积窗口的大小
  • strides: 整数或含有n个整数的tuple/list,指定卷积步长,当不等于1时,无法使用dilation功能,即dialation_rate必须为1.
  • padding: "valid" 或 "same" 之一
  • data_format: * 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”。
  • dilation_rate: 单个整数或由两个个整数构成的list/tuple,指定dilated convolution中的膨胀比例。任何不为1的dilation_rate均与任何不为1的strides均不兼容。
  • activation: activation:激活函数,为预定义的激活函数名(参考激活函数),或逐元素(element-wise)的Theano函数。如果不指定该参数,将不会使用任何激活函数(即使用线性激活函数:a(x)=x)
  • recurrent_activation: 用在recurrent部分的激活函数,为预定义的激活函数名(参考激活函数),或逐元素(element-wise)的Theano函数。如果不指定该参数,将不会使用任何激活函数(即使用线性激活函数:a(x)=x)
  • use_bias: Boolean, whether the layer uses a bias vector.
  • 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之间的浮点数,控制循环状态的线性变换的神经元断开比例
  • 其他参数参考Recurrent的说明

输入shape

若data_format='channels_first', 为形如(samples,time, channels, rows, cols)的5D tensor 若data_format='channels_last' 为形如(samples,time, rows, cols, channels)的5D tensor

输出shape

if return_sequences: if data_format='channels_first' :5D tensor (samples, time, filters, output_row, output_col) if data_format='channels_last' :5D tensor (samples, time, output_row, output_col, filters) else if data_format ='channels_first' :4D tensor (samples, filters, output_row, output_col) if data_format='channels_last' :4D tensor (samples, output_row, output_col, filters) (o_row和o_col由filter和padding决定)

参考文献

Convolutional LSTM Network: A Machine Learning Approach for Precipitation Nowcasting * 当前的实现不包含cell输出上的反馈循环(feedback loop)

SimpleRNNCell层

keras.layers.SimpleRNNCell(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, kernel_constraint=None, recurrent_constraint=None, bias_constraint=None, dropout=0.0, recurrent_dropout=0.0)

SinpleRNN的Cell类

参数

  • 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之间的浮点数,控制循环状态的线性变换的神经元断开比例

GRUCell层

keras.layers.GRUCell(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, kernel_constraint=None, recurrent_constraint=None, bias_constraint=None, dropout=0.0, recurrent_dropout=0.0, implementation=1)

GRU的Cell类

参数

  • 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之间的浮点数,控制循环状态的线性变换的神经元断开比例

  • 其他参数参考Recurrent的说明

LSTMCell层

keras.layers.LSTMCell(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, kernel_constraint=None, recurrent_constraint=None, bias_constraint=None, dropout=0.0, recurrent_dropout=0.0, implementation=1)

LSTM的Cell类

参数

  • 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之间的浮点数,控制循环状态的线性变换的神经元断开比例

  • 其他参数参考Recurrent的说明

StackedRNNCells层

keras.layers.StackedRNNCells(cells)

这是一个wrapper,用于将多个recurrent cell包装起来,使其行为类型单个cell。该层用于实现搞笑的stacked RNN

参数

  • cells:list,其中每个元素都是一个cell对象

例子

cells = [keras.layers.LSTMCell(output_dim),keras.layers.LSTMCell(output_dim),keras.layers.LSTMCell(output_dim),
]inputs = keras.Input((timesteps, input_dim))
x = keras.layers.StackedRNNCells(cells)(inputs)

CuDNNGRU层

keras.layers.CuDNNGRU(units, 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, return_sequences=False, return_state=False, stateful=False)

基于CuDNN的快速GRU实现,只能在GPU上运行,只能使用tensoflow为后端

参数

  • 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之间的浮点数,控制循环状态的线性变换的神经元断开比例

  • 其他参数参考Recurrent的说明

CuDNNLSTM层

keras.layers.CuDNNLSTM(units, 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, return_sequences=False, return_state=False, stateful=False)

基于CuDNN的快速LSTM实现,只能在GPU上运行,只能使用tensoflow为后端

参数

  • 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之间的浮点数,控制循环状态的线性变换的神经元断开比例

  • 其他参数参考Recurrent的说明

包装器Wrapper

TimeDistributed包装器

keras.layers.wrappers.TimeDistributed(layer)

该包装器可以把一个层应用到输入的每一个时间步上

参数

  • layer:Keras层对象

输入至少为3D张量,下标为1的维度将被认为是时间维

例如,考虑一个含有32个样本的batch,每个样本都是10个向量组成的序列,每个向量长为16,则其输入维度为(32,10,16),其不包含batch大小的input_shape(10,16)

我们可以使用包装器TimeDistributed包装Dense,以产生针对各个时间步信号的独立全连接:

# as the first layer in a model
model = Sequential()
model.add(TimeDistributed(Dense(8), input_shape=(10, 16)))
# now model.output_shape == (None, 10, 8)# subsequent layers: no need for input_shape
model.add(TimeDistributed(Dense(32)))
# now model.output_shape == (None, 10, 32)

程序的输出数据shape为(32,10,8)

使用TimeDistributed包装Dense严格等价于layers.TimeDistribuedDense。不同的是包装器TimeDistribued还可以对别的层进行包装,如这里对Convolution2D包装:

model = Sequential()
model.add(TimeDistributed(Convolution2D(64, 3, 3), input_shape=(10, 3, 299, 299)))

Bidirectional包装器

keras.layers.wrappers.Bidirectional(layer, merge_mode='concat', weights=None)

双向RNN包装器

参数

  • layer:Recurrent对象
  • merge_mode:前向和后向RNN输出的结合方式,为sum,mul,concat,aveNone之一,若设为None,则返回值不结合,而是以列表的形式返回

例子

model = Sequential()
model.add(Bidirectional(LSTM(10, return_sequences=True), input_shape=(5, 10)))
model.add(Bidirectional(LSTM(10)))
model.add(Dense(5))
model.add(Activation('softmax'))
model.compile(loss='categorical_crossentropy', optimizer='rmsprop')

编写自己的层

对于简单的定制操作,我们或许可以通过使用layers.core.Lambda层来完成。但对于任何具有可训练权重的定制层,你应该自己来实现。

这里是一个Keras2的层应该具有的框架结构(如果你的版本更旧请升级),要定制自己的层,你需要实现下面三个方法

  • build(input_shape):这是定义权重的方法,可训练的权应该在这里被加入列表`self.trainable_weights中。其他的属性还包括self.non_trainabe_weights(列表)和self.updates(需要更新的形如(tensor, new_tensor)的tuple的列表)。你可以参考BatchNormalization层的实现来学习如何使用上面两个属性。这个方法必须设置self.built = True,可通过调用super([layer],self).build()实现

  • call(x):这是定义层功能的方法,除非你希望你写的层支持masking,否则你只需要关心call的第一个参数:输入张量

  • compute_output_shape(input_shape):如果你的层修改了输入数据的shape,你应该在这里指定shape变化的方法,这个函数使得Keras可以做自动shape推断

from keras import backend as K
from keras.engine.topology import Layer
import numpy as npclass MyLayer(Layer):def __init__(self, output_dim, **kwargs):self.output_dim = output_dimsuper(MyLayer, self).__init__(**kwargs)def build(self, input_shape):# Create a trainable weight variable for this layer.self.kernel = self.add_weight(name='kernel', shape=(input_shape[1], self.output_dim),initializer='uniform',trainable=True)super(MyLayer, self).build(input_shape)  # Be sure to call this somewhere!def call(self, x):return K.dot(x, self.kernel)def compute_output_shape(self, input_shape):return (input_shape[0], self.output_dim)

现存的Keras层代码可以为你的实现提供良好参考,阅读源代码吧!

致谢

本项目由以下贡献者贡献:

文档贡献

贡献者 页面 章节 类型
Bigmoyan keras.io的全部正文 - 翻译
Bigmoyan 深度学习与Keras CNN眼中的世界 翻译
Bigmoyan 深度学习与Keras 花式自动编码器 翻译
Bigmoyan 快速开始 一些基本概念 编写
SCP-173 快速开始 Keras安装和配置指南(Linux) 编写
SCP-173 快速开始 Keras安装和配置指南(Windows) 编写
Bigmoyan 深度学习与Keras 面向小数据集构建图像分类模型 翻译
leo-nlp 深度学习与Keras 在Keras模型中使用预训练的词向量 翻译
zhourunlai 工具 I/O工具 翻译

Tips

贡献者 页面
Bigmoyan Tips处标注
3rduncle Tips处标注
白菜 Tips处标记
我是小将 Tips处标记
zhourunlai 可视化

Keras陷阱提示

贡献者 页面
Bigmoyan tf与th卷积核陷阱
Bigmoyan 向BN层载入权重陷阱
Yin validation_spilit与shuffle陷阱
Hui Liu merge与Merge的区别
## Reviewers  
Reviewer 页面 章节
白菜 快速开始泛型模型 共享层
白菜 常用数据库 IMDB影评倾向分类
doudou 关于模型 关于Keras模型
doudou 常用层 Dense层
艾子 常用层 Merge层
NUDT-小超人、、 快速开始Sequential模型 Merge层
毛毛熊 常用数据库 cifar-10
迷川浩浩 回调函数 callback
tadakey 一些基本概念 张量
方渺渺 递归层 recurrent层
leo-nlp 快速开始泛型模型 共享层
单车 常用层 Masking层
张涛 快速开始泛型模型 多输入和多输出模型
白菜 FAQ 如何观察中间层的输出
毒液 文本预处理 one-hot
毒液 回调函数 EarlyStopping
毒液 目标函数 可用的目标函数
毛毛熊 正则项 缩写
木子天一 局部连接层LocallyConnceted LocallyConnected2D层
QiaXi Pooling层 GlobalMax/GlobalAve
shawn Callback ModelCheckpoint
smallYoki 快速开始 泛型模型

示例程序

  • 虚位以待

小额赞助

如果你觉得本文档对你的研究和使用有所帮助,欢迎扫下面的二维码对作者进行小额赞助,以鼓励作者进一步完善文档内容,提高文档质量。

keras学习-循环层Recurrent-包装器Wrapper-自己的相关推荐

  1. wrapper php,PHP流Streams、包装器wrapper概念与用法实例详解

    本文实例讲述了PHP流Streams.包装器wrapper概念与用法.分享给大家供大家参考,具体如下: 流Streams这个概念是在php4.3引进的,是对流式数据的抽象,用于统一数据操作,比如文件数 ...

  2. php流Streams、包装器wrapper 详解

    流Streams这个概念是在php4.3引进的,是对流式数据的抽象,用于统一数据操作,比如文件数据.网络数据.压缩数据等,以使可以共享同一套函数, php的文件系统函数就是这样的共享,比如file_g ...

  3. 对象包装器和自动装箱

    包装器(wrapper): 基本数据int有一个与之对应的类------Integer,通常,这样的类称之为包装器(wrapper) 如果有一个ArrayList<>,尖括号里是不允许使用 ...

  4. Swift Property Wrapper 属性包装器

    @propertyWrapper属性包装器:在定义存储属性时添加一个分离层,代表该属性被包装起来,且在包装器内部可以做一些事情.把一些通用复用的代码放在了包装器中,比如线程安全检查或者数据存储到数据库 ...

  5. 《Java 核心技术卷1 第10版》学习笔记------ 对象包装器、自动装箱、拆箱

    有时, 需要将 int 这样的基本类型转换为对象. 所有的基本类型都冇一个与之对应的类.例如,Integer 类对应基本类型 int.通常, 这些类称为包装器 ( wrapper ) 这些对象包装器类 ...

  6. Keras中的循环层

    Keras中的循环层 1.简单的RNN的Numpy实现 #简单的RNN的Numpy实现 import numpy as np timesteps=100#输入序列的时间步数 input_feature ...

  7. 知识图谱学习与实践(7)——网页数据抽取(包装器的使用)

    互联网中蕴含着大量的数据资源,这些数据存在于html的代码之中,如何从浩瀚的代码中提取有效的数据,针对不同的情况,可以采用多种方法来实现网页数据的提取. 1 手工方法 网页呈现数据的方式,一般都是按照 ...

  8. Airsim动态 | 安装ROS包装器(AirSim ROS Wrapper)

    本期内容我们将带来在Airsim环境下使用ROS Wrapper的相关教程,以下是AirSim客户端库上的一些ROS Wrapper相关配置. 一.启动 以下步骤适用于 Linux 系统.如果是在 W ...

  9. WPF学习笔记-单实例应用程序(包装器)

    1.添加引用Microsoft.VisualBasic 2.创建 app类 class App : System.Windows.Application{protected override void ...

最新文章

  1. struts2 实现多文件限制上传
  2. 向量距离计算 java_Milvus 向量搜索引擎开源了!
  3. 动态规划之-----单调递增最长子序列(nyoj17)
  4. python ide是什么意思_初学Python使用什么IDE会更好?
  5. 领域驱动 开源项目_在开源领域建立职业的建议
  6. HTTP协议 (四) 缓存
  7. android 默认焦点设置_Android界面设计基础:控件焦点4个步骤
  8. 人工智能:从单细胞生物的智能说起
  9. 性能测试---性能指标【1】
  10. php变量控制结构与函数,LAMP兄弟连原创视频教程(PHP笔记一--变量,流程控制结构,函数)...
  11. Python分析并绘制可视化动态地图,实时查询全球疫情数据(11月最新...)
  12. 关于学计算机趣味段子,【学习段子】_关于学习的经典段子15句
  13. CSS-----颜色值的缩写和字体的缩写方法
  14. 比excel好用,还能解决数据孤岛问题,这款报表工具千万别错过
  15. Fiddler下载安装及手机抓包--小白版
  16. iOS 支持webrtc的浏览器 bowser
  17. 大电流输出信号隔离转换模块
  18. USACO Section 1.2 Broken Necklace
  19. 谷粒商城十elasticsearch搜索服务及商品上架
  20. 新冠状病毒的基因序列

热门文章

  1. 速览|京东云11月产品与功能更新
  2. 乌班图搭建sftp服务器
  3. 【TCO2013 Semifinal 2】 OneBlack
  4. tinycore php,Tiny Core Linux 显示中文的方法
  5. 技术分享 | 学做测试平台开发-Vuetify 框架
  6. 自家的摇头扇线掉了 (电风扇的五根线怎么接)
  7. PS抠字、PS修改图片文字
  8. 【HDU】 4833 Best Financing DP
  9. 5G丨柬埔寨移动运营商Smart Axiata与华为合作进行5G测试
  10. 老虎过河编程java_2017年拓展游戏《老虎过河》