(转)Keras中LSTM使用过程中的几个易混点

480 阅读1分钟

1、LSTMCell类和LSTM类的区别

LSTMCell类是对LSTM单个计算单元的完整封装,里面包含了各个计算步骤的详细过程,在LSTM层中用作实际计算单元。而LSTM类是抽象类RNN的子类,通过实例化LSTMCell来完成LSTM的计算。简单来说,LSTMCell类是LSTM的“心”,而LSTM类是LSTM的“壳”(比喻不一定恰当)。

图片.png

2、LSTM中的return_sequences和return_state的区别?

return_sequence返回每个时间步上的隐状态(hidden state),return_state返回最后一个时间步上的隐状态和细胞状态(hidden state和cell state)。

y = LSTM(units=self.rnn_units)(x) 
Tensor("lstm_1/TensorArrayReadV3:0", shape=(?, 128), dtype=float32)
 
y = LSTM(units=self.rnn_units, return_sequences=True)(x) 
Tensor("lstm_2/transpose_2:0", shape=(?, ?, 128), dtype=float32) 
 
y = LSTM(units=self.rnn_units, return_state=True)(x) 
[<tf.Tensor 'lstm_3/TensorArrayReadV3:0' shape=(?, 128) dtype=float32>, <tf.Tensor 'lstm_3/while/Exit_2:0' shape=(?, 128) dtype=float32>, <tf.Tensor 'lstm_3/while/Exit_3:0' shape=(?, 128) dtype=float32>] 
 
y = LSTM(units=self.rnn_units, return_sequences=True, return_state=True)(x) 
[<tf.Tensor 'lstm_4/transpose_2:0' shape=(?, ?, 128) dtype=float32>, <tf.Tensor 'lstm_4/while/Exit_2:0' shape=(?, 128) dtype=float32>, <tf.Tensor 'lstm_4/while/Exit_3:0' shape=(?, 128) dtype=float32>]

3、LSTM中activation和recurrent_activation的区别?

recurrent_activation是针对三个门机制(遗忘门、输入门、输出门)的激活函数,而activation是针对输入信息(默认tanh)和当前隐状态输出(默认tanh)的激活函数。

图片.png

4、LSTMCell类和LSTM类分别如何使用?

RNN(LSTMCell(32))
LSTM(32)
这两者等价

5、keras使用过程中,activation等参数接受字符串值,keras是如何实现真正调用到相应激活函数的?

在activations.py中调用globals()函数,获取到当前py模块中全局变量映射,其中各个激活函数的名字和激活函数本身存在kv的映射关系。直接get激活函数名称字符串就能得到激活函数本身。这其实是一种“反射”机制。

图片.png

以上内容转载自Keras中LSTM使用过程中的几个易混点
原作者:我是乔木