循环层

当数据中因果关系和顺序都十分重要时,就可以使用循环层来处理。循环层的使用会增加计算负荷。

循环层的内容较多也比较复杂,这里拣选几个常用有代表性的层来说明。

SimpleRNN

全连接的RNN(循环神经网络),所有输出都会被反馈到输入。构造方法为:

keras.layers.SimpleRNN(
	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, 
	activity_regularizer=None, 
	kernel_constraint=None, 
	bias_constraint=None, 
	dropout=0.0, 
	recurrent_dropout=0.0, 
	return_sequence=False, 
	return_state=False, 
	go_backwards=False, 
	stateful=False, 
	unroll=False)

其中部分参数的含义如下。

  • units,输出空间的维度。
  • activation,要使用的激活函数,默认双曲正切(\(tan\ h\))。
  • recurrent_constraint,循环核心权值矩阵的约束函数。
  • dropout,单元的丢弃比例,用于输入的线性转换,取值范围为\([0, 1]\)。
  • recurrent_dropout,单元的丢弃比例,用于循环层的线性转换,取值范围为\([0, 1]\)。
  • return_sequence,指定返回序列中的最后一个输出还是全部序列。
  • return_state,指定除了输出以外时候还需要返回最后一个状态。
  • go_backgwards,设定为True,则向后处理输入序列并返回相反的序列。
  • stateful,设定为True,则批次中索引i处的每个样本的最后一个状态将用作下一批次中索引i样本的初始状态。
  • unroll,设定为True,则网络将展开,否则使用符号循环。展开可以加速RNN,但占用更多内存。

GRU

门限循环单元网络,构造参数基本与SimpleRNN相同。

LSTM

长短期记忆网络层,构造参数与SimpleRNN相同。

ConvLSTM2D

卷积LSTM,用途类似于LSTM,但输入变换和循环变换都是卷积的。