2017-07-31 77 views
1

當採用下面Keras網絡進行訓練和分類9類:Keras多類分類概率不總結1

from keras.models import Model 
from keras.layers import Convolution1D, Input, Dropout, GlobalMaxPooling1D, Dense, merge 

input_window3 = Input(shape=(MEANLEN, W2VLEN)) 
input_window4 = Input(shape=(MEANLEN, W2VLEN)) 

conv_w3 = Convolution1D(MEANLEN*2, 3, activation='tanh', border_mode='valid')(input_window3) 
drop_w3 = Dropout(0.7)(conv_w3), 
pool_w3 = GlobalMaxPooling1D(name='pool_w3')(drop_w3[0]) 

conv_w4 = Convolution1D(MEANLEN, 5, activation='tanh', border_mode='valid')(input_window4) 

drop_w4 = Dropout(0.7)(conv_w4), 
pool_w4 = GlobalMaxPooling1D(name='pool_w4')(drop_w4[0]) 
print(conv_w4.shape) 

x = merge([pool_w3, pool_w4], mode='concat', concat_axis=1) 
print(x.shape) 
x = Dense(MEANLEN*3, activation='relu')(x) 
drop_dense = Dropout(0.5)(x) 
main_output = Dense(num_categories, activation='sigmoid', name='main_output')(drop_dense) 
model = Model(input=[input_window3, input_window4], output=[main_output]) 
model.compile(optimizer='adam', loss='mse', metrics=['accuracy', f1_score]) 

測算:呈三角這些的載體

result = model.predict([X_test, X_test]) 

返回陣列:

array([[ 0.08401331, 0.1911521 , 0.14310306, 0.07138534, 0.19428432, 
     0.15808958, 0.16400988, 0.27708355, 0.09983496], 
     [ 0.02074078, 0.08897329, 0.03244834, 0.00112842, 0.04122255, 
     0.03494435, 0.17535761, 0.55671334, 0.04375785], 
     [ 0.04897207, 0.06169643, 0.00313113, 0.002085 , 0.00275023, 
     0.00131959, 0.09961601, 0.56414878, 0.02338091]], dtype=float32) 

數組中的值,我假設爲類概率,不會將u如何得到類概率?

回答

3

根據您發佈陣列上,你有9類。在這種情況下,您應該用softmax替代您的最終激活功能,而不是S形。另外,如果你還沒有完成,你需要將你的標籤轉換成一個熱門的載體。您可以使用功能to_categorical來做到這一點。最後,作爲損失函數,您應該使用categorical_crossentropy損失,而不是mse。有關使用keras進行分類的教程(使用上述功能)提供here

2

一般來說,當你想擁有類似於你在最後一層,而不是乙狀結腸使用softmax activation function一個絕對的概率分佈的輸出:

main_output = Dense(num_categories, activation='softmax', name='main_output')(drop_dense)