Sparse_categorical_crossentropy vs categorical_crossentropy(keras、精度)


20

どちらが正確性のために優れていますか、それとも同じですか?もちろん、categorical_crossentropyを使用する場合は1つのホットエンコーディングを使用し、sparse_categorical_crossentropyを使用する場合は通常の整数としてエンコードします。また、一方が他方より優れているのはいつですか?

回答:


26

クラスが相互に排他的である場合(たとえば、各サンプルが1つのクラスに正確に属する場合)、1つのサンプルが複数のクラスを持つことができる場合やカテゴリがソフト確率([0.5、0.3、0.2])である場合は、スパースカテゴリクロスエントロピーを使用します。

カテゴリのクロスエントロピーの式(S-サンプル、C-クラス、サンプルはクラスcに属する)は次のとおりです。sc

1NsScC1sclogpsc

クラスが排他的である場合、それらを合計する必要はありません-各サンプルについて、ゼロ以外の値のみが真のクラスcです。logpsc

これにより、時間とメモリを節約できます。相互に排他的な10000クラスの場合を考えてみましょう。サンプルごとに10000を合計するのではなく、ログを1つだけ、10000の浮動小数点ではなく整数を1つだけ。

式は両方の場合で同じであるため、精度に影響はありません。


1
たとえば、mnist digitデータセットなど、精度に異なる影響を与えますか?
マスターM

1
数学的には違いはありません。実装によって計算された値に大きな差がある場合(たとえば、テンソルフローまたはパイトーチ)、これはバグのように聞こえます。ランダムデータ(1000クラス、10,000サンプル)の単純な比較では違いはありません。
frenzykryger

frenzykryger様、1つのサンプルの場合のみマイナスを忘れたと思います。「各サンプルについて、ゼロ以外の値のみが-log(p(s c)))です。残りについては、いい答えです。
Nicg

あなたが正しい。ありがとう!
-frenzykryger

@frenzykryger私はマルチ出力の問題に取り組んでいます。3つの個別の出力がo1,o2,o3あり、それぞれに167,11,7クラスがあります。私はあなたの答えを読みましたが、違いはありませんが、私が使用してsparse__もしなくても違いはあります。最初のクラスには167のクラスがあるのでcategorical、最後の2 sparseつと最初の2つに行くことができますか?
デシュワル

5

一言で言えば、答え

ターゲットがワンホットエンコードされている場合は、categorical_crossentropyを使用します。ワンホットエンコーディングの例:

[1,0,0]
[0,1,0] 
[0,0,1]

ただし、ターゲットが整数の場合は、sparse_categorical_crossentropyを使用します。整数エンコードの例(完了のため):

1
2
3

単一の出力ノードが必要sparse_categorical_crossentropyですか?そして、from_logits引数はどういう意味ですか?
リーボ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.