我目前使用Keras创建了一个LSTM网络,并且需要获取每个节点的内部遗忘门值。我需要在每次调用predict()函数时获取遗忘门/值。是否有可能这样做?
如果不行,那么是否有其他库可以方便地在每一步中访问这些内部门值?
期待尽早得到帮助。
谢谢。我目前使用Keras创建了一个LSTM网络,并且需要获取每个节点的内部遗忘门值。我需要在每次调用predict()函数时获取遗忘门/值。是否有可能这样做?
如果不行,那么是否有其他库可以方便地在每一步中访问这些内部门值?
期待尽早得到帮助。
谢谢。如果您正在使用Keras
和Tensorflow
后端(这是推荐的后端),您可以使用tf.global_variables()
访问内部层值(如权重和偏差)。为方便起见,请创建一个字典,将层名称映射到相应的tf.Variable
:
variable_dict = dict([])
for variable in tf.global_variable():
variable_dict[variable.name] = variable
LSTM
层(假设model.summary()
显示LSTM层命名为'lstm_1'
)具有以下内部变量:'lstm_1/kernel:0'
,'lstm_1/recurrent_kernel:0'
和'lstm_1/bias:0'
。要获取它们的值,您需要了解Tensorflow的Session
和Tensor
对象。LSTMCell
类,特别是build
(描述定义了哪些变量)和call
(描述如何在计算中使用这些变量)方法。似乎内部参数存储在变量中,命名为*_i
,*_f
,*_c
,*_o
(例如self.kernel_o
)。
不幸的是,您需要直接修改计算图。这比听起来要容易得多:只需编辑Tensorflow的代码,并将这些变量存储在全局范围内的命名张量中。