小编aha*_*gen的帖子

Keras 的 CategoricalCrossEntropy 到底在做什么?

我正在移植一个 keras 模型torch,但我无法'categorical_crossentropy'在 softmax 层之后复制 keras/tensorflow 的确切行为。我对这个问题有一些解决方法,所以我只对了解计算分类交叉熵时 tensorflow究竟计算什么感兴趣。

作为一个玩具问题,我设置了标签和预测向量

>>> import tensorflow as tf
>>> from tensorflow.keras import backend as K
>>> import numpy as np


>>> true = np.array([[0.0, 1.0], [1.0, 0.0]])
>>> pred = np.array([[0.0, 1.0], [0.0, 1.0]])
Run Code Online (Sandbox Code Playgroud)

并计算分类交叉熵:

>>> loss = tf.keras.losses.CategoricalCrossentropy()
>>> print(loss(pred, true).eval(session=K.get_session()))
8.05904769897461
Run Code Online (Sandbox Code Playgroud)

这与分析结果不同

>>> loss_analytical = -1*K.sum(true*K.log(pred))/pred.shape[0]
>>> print(loss_analytical.eval(session=K.get_session()))
nan
Run Code Online (Sandbox Code Playgroud)

我深入研究了 keras/tf 的交叉熵的源代码(参见Tensorflow Github Source Code 中的 Softmax Cross Entropy implementation),并在https://github.com/tensorflow/tensorflow/blob/c903b4607821a03c36c17b0befa25306c6/compilerflow/compiler/找到了 c 函数 …

python machine-learning keras tensorflow

5
推荐指数
2
解决办法
1326
查看次数

标签 统计

keras ×1

machine-learning ×1

python ×1

tensorflow ×1