访问神经网络权重和神经元激活

时间:2016-04-23 14:46:17

标签: tensorflow theano deep-learning caffe keras

使用Keras训练网络后:

  1. 我想以某种顺序访问网络的最终训练权重。

  2. 我想知道传递的每个输入的神经元激活值。例如,在训练之后,如果我将X作为我的输入传递给网络,我想知道网络中每个神经元的X的神经元激活值。

  3. Keras是否提供对这些内容的API访问权限?我想根据神经元激活值做进一步的分析。

    更新:我知道我可以纯粹使用Theano来做这件事,但Theano需要更多的低级编码。而且,由于Keras建立在Theano之上,我认为可以有办法做到这一点?

    如果Keras不能这样做,那么在Tensorflow和Caffe之间可以做到吗? Keras是最容易使用的,其次是Tensorflow / Caffe,但我不知道其中哪些提供了我需要的网络访问权限。我的最后一个选择是下降到Theano,但我认为用Theano建立一个深度CNN会更费时..

1 个答案:

答案 0 :(得分:5)

Keras FAQ中介绍了这一点,您基本上想要计算每个图层的激活,因此您可以使用以下代码执行此操作:

from keras import backend as K

#The layer number
n = 3 
# with a Sequential model
get_nth_layer_output = K.function([model.layers[0].input],
                                  [model.layers[n].output])
layer_output = get_nth_layer_output([X])[0]

不幸的是,你需要为每一层编译和运行一个函数,但这应该是直截了当的。

要获得权重,您可以在任何图层上调用get_weights()

nth_weights = model.layers[n].get_weights()