2017-06-15 8 views
1

kerasバックエンドを使用してカスタムメトリックを作成しています。私が取得したいと思いkeras backend proba to categorical

from keras import backend as K 
y_pred = K.variable([[0.7, 0.2, 0.1],[0.2, 0.8, 0],[0.2,0.2,0.6],[0.9,0.05,0.05]]) 
K.eval(y_pred) 

array([[ 0.69999999, 0.2  , 0.1  ], 
     [ 0.2  , 0.80000001, 0.  ], 
     [ 0.2  , 0.2  , 0.60000002], 
     [ 0.89999998, 0.05  , 0.05  ]], dtype=float32) 

を与える:

array([[ 1, 0, 0], 
     [ 0, 1, 0], 
     [ 0, 0, 1], 
     [ 1, 0, 0]], dtype=float32) 

私が見つけた最初のステップは、カテゴリーデータ などにprobaテンソル(ソフトマックスの出力)を変換することですK.argmax関数ですが、それを使ってテンソルの値を置き換える方法がわかりません。

max_index = K.cast(K.argmax(y_pred, 1), "int32") 
lol_index = K.arange(y_pred.shape[0], dtype="int32") 
y_pred[index, max_index] 

ができます:

ValueError: Shape must be rank 1 but is rank 2 for 'strided_slice_32' (op: 'StridedSlice') with input shapes: [4,3], [2,4], [2,4], [2]. 
+1

同様のスレッド:https://stackoverflow.com/questions/44553722/restricting-をkerasのアウトプット値= 44554112#44554112 – petezurich

+0

これは、別の問題ではありますが、答えはありました:https://stackoverflow.com/a/20295159/4895899 –

+0

私はケラを話していますバックエンド、それはnumpyと同じではありません。 –

答えて

1

[OK]をいくつかの研究の後、私は私の解決策を見つけたので:ここ

K.one_hot(K.argmax(y_pred), 3)