В чем разница (математически) между этими двумя фрагментами кода? На самом деле я хочу построить функцию недоумения без вызовов функций Keras / Tensorflow.
В то время как версия Keras / tf дает хорошие результаты, версия numpy / sklearn не дает. Для того же входа Keras / tf выводит значение около 300 (что реалистично), но версия numpy / sklearn близка к 1.
Существует еще немного кода для предварительной и последующей обработки, но с математической точки зрения это должно быть важной частью.
Я прочитал http://wiki.fast.ai/index.php/Log_Loss#Log_Loss_vs_Cross-Entropy, что log_loss является эквивалентом перекрестной энтропии. Таким образом, при одинаковом входе эти фрагменты должны вычислять один и тот же результат.
1.
xentropy = K.sparse_categorical_crossentropy(tf.keras.backend.cast(all_labels[i], dtype='float32'), tf.keras.backend.cast(all_predictions[i], dtype='float32'))
perplexity.append(K.eval(K.pow(2.0, xentropy)))
2
perplexity += np.power(sklearn.metrics.log_loss(one_hot_label[i], all_predictions[i]), 2.0)