【发布时间】:2018-06-21 16:33:36
【问题描述】:
我目前使用 Keras 创建了一个 LSTM 网络,并且必须获取网络每个节点的内部遗忘门值。每次调用 predict() 函数时,我都必须获取忘记门/值。有可能吗?
如果没有,那么是否有任何其他库可以在每一步以方便的方式访问这些内部门值?
期待尽早在这方面提供一些帮助。 谢谢。
【问题讨论】:
标签: python deep-learning keras lstm
我目前使用 Keras 创建了一个 LSTM 网络,并且必须获取网络每个节点的内部遗忘门值。每次调用 predict() 函数时,我都必须获取忘记门/值。有可能吗?
如果没有,那么是否有任何其他库可以在每一步以方便的方式访问这些内部门值?
期待尽早在这方面提供一些帮助。 谢谢。
【问题讨论】:
标签: python deep-learning keras lstm
如果您使用Keras 和Tensorflow 后端(这是推荐的后端),您可以使用tf.global_variables() 访问内部层值(如权重和偏差)。为方便起见,创建一个字典,将图层名称映射到相应的tf.Variable:
variable_dict = dict([])
for variable in tf.global_variable():
variable_dict[variable.name] = variable
经过这个简单的映射后,您可以直接通过变量名来引用变量。 Keras 的LSTM 层(假设model.summary() 表明LSTM 层被命名为'lstm_1')具有以下内部变量:'lstm_1/kernel:0'、'lstm_1/recurrent_kernel:0' 和'lstm_1/bias:0'。要获取它们的值,您需要对 Tensorflow 的 Session 和 Tensor 对象有所了解。
现在是棘手的部分:Keras 如何将变量存储在这些张量中?该文档没有指定任何有关它的信息,因此很遗憾您将不得不参考source code。查看LSTMCell 类,尤其是build(描述定义了哪些变量)和call(描述如何在计算中使用这些变量)方法。似乎内部参数存储在变量中,命名为*_i,*_f,*_c,*_o(例如self.kernel_o)。
很遗憾,您将不得不直接修改计算图。这比听起来容易:只需编辑 Tensorflow 的代码并将这些变量存储在全局范围内的命名张量中。
如果没有,那么是否有任何其他库可以访问这些 以方便的方式在每一步的内部门值?
如您所见,Keras 与 Tensorflow 后端非常方便。我认为没有比这更方便的了。
【讨论】: