2016-04-23 137 views
4

訓練使用Keras網絡後:訪問神經網絡權和神經元激活

  1. 我要訪問網絡的最終訓練的權重以某種順序。

  2. 我想知道每個輸入通過的神經元激活值。例如,在訓練之後,如果我通過X作爲我的網絡輸入,我想知道網絡中每個神經元的神經元激活值X

Keras是否提供API訪問這些東西?我想根據神經元激活值做進一步的分析。

更新:我知道我可以純粹使用Theano,但Theano需要更多的低級編碼。而且,由於Keras建立在Theano之上,我認爲可能有辦法做到這一點?

如果凱拉斯不能做到這一點,那麼在Tensorflow和Caffe之間,哪個可以? Keras是最容易使用的,然後是Tensorflow/Caffe,但我不知道哪些提供了我需要的網絡訪問。對我來說最後一個選擇是下降到Theano,但我認爲用Theano建立一個更深的CNN會更費時間..

回答

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()