2017-09-13 6 views
0

機能keras.metrics.binary_accuracyは非常に簡単です:`K.cast`は` K.mean`ではなく `categorical_accuracy`でなぜ使われていますか?

def binary_accuracy(y_true, y_pred): 
    return K.mean(K.equal(y_true, K.round(y_pred)), axis=-1) 

https://github.com/fchollet/keras/blob/master/keras/metrics.py#L20

機能keras.metrics.categorical_accuracyは別の何かを持っているしかし:

def categorical_accuracy(y_true, y_pred): 
    return K.cast(K.equal(K.argmax(y_true, axis=-1), 
          K.argmax(y_pred, axis=-1)), 
        K.floatx()) 

https://github.com/fchollet/keras/blob/master/keras/metrics.py#L24

私は、なぜこの関数が使用することを非常に混乱していますK.cast、in K.meanの代わりに?この関数は関数と同じように数値を返さなければならないと考えているのでkeras.metrics.binary_accuracy

答えて

1

castの理由は、argmaxが整数を返すためです。これは最高値のインデックスです。しかし結果はフロートでなければなりません。

argmax機能:

argmax機能も入力のランクを削減します。 axis=-1を使用していることに注意してください。つまり、最後の軸で最大値のインデックスを取得し、その軸は削除しますが、他の軸は保持します。あなたの入力を想定

は形状(10 samples, 5 features)を持っていた、返されたテンソルはaxis=-1とちょうど(10 samples,)

mean機能のようになります。

通常、mean関数は、スカラーを返しますが、あなたはbinary_accuracyをよく見るとmean関数のaxis=-1を使用すると、入力を単一のスカラー値に縮小しないことに気づくでしょう。 argmaxとまったく同じ方法でテンソルを減らしますが、この場合は平均値を計算します。

入力(10,5)(10,)となります。

最終結果:

そこで、我々は両方のメトリックが同じ形状でテンソルを返すと結論付けることができます。さて、なぜ彼らの両方がスカラー値にeverthingを削減していない私には謎です....

これは、メトリックの実装はちょうど約要素xの要素に正しさを気にする必要があり、最終的な結果が続いているようですコードのどこかで計算されます。

関連する問題