考慮具有以下結構的其最後的兩層的完全連接的神經網絡:Keras激活函數之前檢索節點的值
[Dense]
units = 612
activation = softplus
[Dense]
units = 1
activation = sigmoid
淨的輸出值是1,但我想知道sigmoidal函數的輸入x是什麼(必須是一些很高的數字,因爲sigm(x)在這裏是1)。
Folllowing indraforyou's答案我設法獲取Keras層的輸出和重量:
outputs = [layer.output for layer in model.layers[-2:]]
functors = [K.function([model.input]+[K.learning_phase()], [out]) for out in outputs]
test_input = np.array(...)
layer_outs = [func([test_input, 0.]) for func in functors]
print layer_outs[-1][0] # -> array([[ 1.]])
dense_0_out = layer_outs[-2][0] # shape (612, 1)
dense_1_weights = model.layers[-1].weights[0].get_value() # shape (1, 612)
dense_1_bias = model.layers[-1].weights[1].get_value()
x = np.dot(dense_0_out, dense_1_weights) + dense_1_bias
print x # -> -11.7
怎麼能X是負數?在這種情況下,最後一層的輸出應該是一個比1.0更接近0.0的數字。 dense_0_out
或dense_1_weights
錯誤的輸出或權重?
它不應該是'x = np.dot(dense_0_out,dense_1_weights)+ dense_1_bias'嗎? –
@MarcinMożejko你是對的,我糾正了它。由於偏見被訓練到0.0,所以沒有任何改變。 – johk95
但是這個層的輸出被送到softmax--你獲得的值被壓縮到[0,1]間隔。 –