TF 2.0 SparseCategoricalCrossEntropy странное поведение - PullRequest
1 голос
/ 05 января 2020

Я пытаюсь выполнить некоторую настройку, используя SparseCategoricalCrossEntropy здесь, но я понял, что значение не соответствует ожидаемому здесь, когда сумма вероятностей не равна 1.

import numpy as np
import tensorflow as tf

cce = tf.keras.losses.SparseCategoricalCrossentropy(reduction=Reduction.NONE)
loss = cce(
  tf.constant([0, 1, 2]),
  tf.constant([[.9, .05, .05], [.5, .89, .6], [.05, .01, .94]]))
print(loss) # [0.10536056 0.8046684  0.0618754]

# What I expect for the second list is
-np.log(.89) # 0.1165338

# Validity check for first and third row
-np.log(.9) # 0.105360
-np.log(.94) # 0.061875

Я что-то здесь неправильно понимаю? Что он делает под капотом?

1 Ответ

1 голос
/ 05 января 2020

Давайте посмотрим на керас реализацию потерь для numpy:

def categorical_crossentropy(target, output, from_logits=False):
    if from_logits:
        output = softmax(output)
    else:
        output /= output.sum(axis=-1, keepdims=True)
    output = np.clip(output, 1e-7, 1 - 1e-7)
    return np.sum(target * -np.log(output), axis=-1, keepdims=False)

, как вы можете видеть, результат делится на сумму всех вероятностей, поэтому мы имеем :

-np.log(.89/(.5 + .89 + .6)) # 0.8046684549923527
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...