Keras构建RNN

Tensorflow中实现的模型

目前在Tensorflow中已经实现了3种内置的RNN模型:

  1. tf.keras.layers.SimpleRNN:使用全连接,并将上一层的输出(而非状态)作为下一层的输入。

  2. tf.keras.layers.GRU

  3. tf.keras.layers.LSTM

RNN层参数

单次输出/多次输出

默认情况下,RNN层只有一个输出,对应最后一个时间步,因而输出形状应该为(batch_size,units)。 当然对应另一种结构,亦可以实现每一个时间步一个输出,这样一来输出的形状就应该为(batch_size, timesteps, units)。只需要设置参数return_sequences=True

状态返回

RNN也可以返回其最终的状态,这个状态可以用来继续执行,或者用来初始化另一个RNN层,只需要设置参数return_state=True。需要注意LSTM会返回两个张量,而GRU只会返回一个。

output, state_h, state_c = layers.LSTM(64, return_state=True, name='encoder')(encoder_embedded) # 获取状态
encoder_state = [state_h, state_c]
decoder_output = layers.LSTM(64, name='decoder')(decoder_embedded, initial_state=encoder_state) # 使用状态来创建新的层

自定义化

对于RNN模型的自定义可以通过将自定义的单元(RNN cell)包装进tf.keras.layers.RNN来实现,cell中具体要实现那些方法见其API文档

参考

Last updated

Was this helpful?