既然你正在使用get_value()
,我假设您使用的是 Theano 后端。要获取 sigmoid 激活之前节点的值,您可以遍历计算图 http://deeplearning.net/software/theano/extending/graphstructures.html#traversing-the-graph.
可以使用所有者字段从输出(某些计算的结果)开始遍历该图直至其输入。
在你的情况下,你想要的是输入x
sigmoid 激活操作的sigmoid 运算的输出是model.output
。将这些放在一起,变量x
is model.output.owner.inputs[0]
.
如果你打印出这个值,你会看到Elemwise{add,no_inplace}.0
,这是一个逐元素加法运算。可以从以下方面验证源代码 https://github.com/fchollet/keras/blob/master/keras/layers/core.py#L840-L846 of Dense.call()
:
def call(self, inputs):
output = K.dot(inputs, self.kernel)
if self.use_bias:
output = K.bias_add(output, self.bias)
if self.activation is not None:
output = self.activation(output)
return output
激活函数的输入是输出K.bias_add()
.
通过对代码进行少量修改,您可以在激活之前获取节点的值:
x = model.output.owner.inputs[0]
func = K.function([model.input] + [K.learning_phase()], [x])
print func([test_input, 0.])
对于使用 TensorFlow 后端的任何人:使用x = model.output.op.inputs[0]
反而。