LoginSignup
7
6

More than 5 years have passed since last update.

クロスエントロピー誤差の計算例

Last updated at Posted at 2017-03-21

追記:重大ミス




binary_crossentropyに変えたら精度が良くなったというのは勘違いでした。model.evaluate()で出てくる数字や学習中に出てくるaccuracyというのが caetgorical_accuracyではなく binary_accuracyとして表示されてしまっていたのが原因でした。
また、ここで手計算している binary_crossentropyというのもよくわからない計算をしたものになっています。混乱していた中で書いてしまった恥ずかしいミスです。こんなミスがあったということを覚えておくために残しておきますが、以下の情報は役には立ちません。




kerasでcifar10の画像分類を試していたところ、最後の損失関数を`categorical_crossentropy`から `binary_crossentropy`に変えたら急に精度が良くなりました。

70% -> 95%

categorical_crossentropybinary_crossentropyのイメージがつかなかったので手計算してみました。
これで合ってるかな・・・?
binary cross entropyの方が出力がなだらかになる感じですね。

2クラス分類(categoricalもbinaryも同じ)

y p
0 0.9
1 0.1

if t = 0

-(0*log(0.1) + 1*log(0.9))
= 0.105

if t = 1

-(1*log(0.1) + 0*log(0.9))
= 2.303

3クラス分類① categorical

y p
0 0.9
1 0.05
2 0.05

if t = 0

-(1*log(0.9) + 0*log(0.05) + 0*log(0.05))
= 0.105

if t = 1

-(0*log(0.9) + 1*log(0.05) + 0*log(0.05))
= 2.996

if t = 2

-(0*log(0.9) + 0*log(0.05) + 1*log(0.05))
= 2.996

3クラス分類① binary

y p
0 0.9
1 0.05
2 0.05

if t = 0

-(1*log(0.9) + 0*log(0.05) + 0*log(0.05))
= 0.105

if t != 1

-(0*log(0.9) + 1*log(1 - 0.9))
= 2.303

3クラス分類② categorical

y p
0 0.6
1 0.3
2 0.1

if t = 0

-(1*log(0.6) + 0*log(0.3) + 0*log(0.1))
= 0.511

if t = 1

-(0*log(0.6) + 1*log(0.3) + 0*log(0.1))
= 1.204

if t = 2

-(0*log(0.6) + 0*log(0.3) + 1*log(0.1))
= 2.303

3クラス分類② binary

y p
0 0.6
1 0.3
2 0.1

if t = 0

-(1*log(0.6) + 0*log(0.3) + 0*log(0.1))
= 0.511

if t != 1

-(0*log(0.6) + 1*log(1 - 0.6))
= 0.916

7
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
6