1、LSTMCell类和LSTM类的区别
LSTMCell类是对LSTM单个计算单元的完整封装,里面包含了各个计算步骤的详细过程,在LSTM层中用作实际计算单元。而LSTM类是抽象类RNN的子类,通过实例化LSTMCell来完成LSTM的计算。简单来说,LSTMCell类是LSTM的“心”,而LSTM类是LSTM的“壳”(比喻不一定恰当)。
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)的激活函数。
4、LSTMCell类和LSTM类分别如何使用?
RNN(LSTMCell(32))
LSTM(32)
这两者等价
5、keras使用过程中,activation等参数接受字符串值,keras是如何实现真正调用到相应激活函数的?
在activations.py中调用globals()函数,获取到当前py模块中全局变量映射,其中各个激活函数的名字和激活函数本身存在kv的映射关系。直接get激活函数名称字符串就能得到激活函数本身。这其实是一种“反射”机制。
以上内容转载自Keras中LSTM使用过程中的几个易混点
原作者:我是乔木