在循环时间步长期间记录LSTM内部门激活

时间:2019-05-31 15:52:20

标签: python tensorflow keras lstm

我目前正在研究喀拉斯邦的复发性LSTM细胞。 为了分析我的网络,我想在时间序列预测期间查看LSTM单元中的i,c,o和f值。

基本上,我想要一个记录张量,该记录张量在重复期间记录内部LSTM单元值

我已经尝试简单地打印出这些值,但是我认为由于代码仅在编译时运行并且未包含在图中,因此我无法获得预期的行为。据我了解,TF的内部张量是declerativ的,在会话外不保存任何数据。

我还尝试将整个LSTM类修改为具有日志记录变量,但是我没有使它起作用。我目前对代码结构的了解还很滞后,无法找到一种输出这些值的方法。

基本上我想记录这四个值,它们位于LSTMCell的调用函数中:

i = self.recurrent_activation(x_i + K.dot(h_tm1_i ,self.recurrent_kernel_i))
f = self.recurrent_activation(x_f + K.dot(h_tm1_f,self.recurrent_kernel_f))
c = f * c_tm1 + i * self.activation(x_c + K.dot(h_tm1_c, self.recurrent_kernel_c))
o = self.recurrent_activation(x_o + K.dot(h_tm1_o, self.recurrent_kernel_o)

在循环/展开计算中,keras中是否有一种简单的内置方法来记录内部LSTM单元数据?如果没有,那么什么是最好的方式和开始看的地方?是否有其他方法或库可用于添加日志记录功能?

1 个答案:

答案 0 :(得分:0)

到目前为止,我还不能在keras中实现门激活记录。

我认为实现keras登录的最佳解决方案是将LSTM层分为两个中间层,并在其间有一个打印输出层。这涉及实现两个Costum层。

但是,我从基于keras的实现切换到了matlab。 Matlab神经网络的实现和结构使代码易于编辑,并且实现记录功能很简单。