访问神经网络权重和神经元激活
Accessing neural network weights and neuron activations
使用 Keras 训练网络后:
我想按某种顺序访问网络的最终训练权重。
我想知道每个传递的输入的神经元激活值。例如,在训练之后,如果我将 X
作为我的输入传递给网络,我想知道网络中每个神经元的 X
的神经元激活值。
Keras 是否提供 API 访问这些东西?我想根据神经元激活值做进一步的分析。
Update :我知道我可以纯粹使用 Theano 来做到这一点,但是 Theano 需要更多的低级编码。而且,由于 Keras 建立在 Theano 之上,我认为可能有办法做到这一点?
Keras 做不到,那么Tensorflow 和Caffe 哪个做得到? Keras 是最容易使用的,其次是 Tensorflow/Caffe,但我不知道其中哪一个提供了我需要的网络访问。对我来说最后的选择是下降到 Theano,但我认为用 Theano 构建深度 CNN 会更耗时..
这在 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()
使用 Keras 训练网络后:
我想按某种顺序访问网络的最终训练权重。
我想知道每个传递的输入的神经元激活值。例如,在训练之后,如果我将
X
作为我的输入传递给网络,我想知道网络中每个神经元的X
的神经元激活值。
Keras 是否提供 API 访问这些东西?我想根据神经元激活值做进一步的分析。
Update :我知道我可以纯粹使用 Theano 来做到这一点,但是 Theano 需要更多的低级编码。而且,由于 Keras 建立在 Theano 之上,我认为可能有办法做到这一点?
Keras 做不到,那么Tensorflow 和Caffe 哪个做得到? Keras 是最容易使用的,其次是 Tensorflow/Caffe,但我不知道其中哪一个提供了我需要的网络访问。对我来说最后的选择是下降到 Theano,但我认为用 Theano 构建深度 CNN 会更耗时..
这在 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()