我看到了一些sigmoid
用作输出层和BinaryCrossentropy
损失函数的自动编码器(在图像上)的例子。
自动编码器的输入被归一化 [0..1]sigmoid
输出值(图像的每个像素的值)[0..1]
我试图评估的输出,BinaryCrossentropy
我很困惑。
为简单起见,假设我们有图像 [2x2],我们运行自动编码器并得到 2 个结果。一个结果接近真值,第二个结果与真值相同:
import numpy as np
import tensorflow as tf
bce = tf.keras.losses.BinaryCrossentropy()
y_true = [0.5, 0.3, 0.5, 0.9]
y_pred = [0.1, 0.3, 0.5, 0.8]
print(bce(y_true, y_pred).numpy())
y_pred = [0.5, 0.3, 0.5, 0.9]
print(bce(y_true, y_pred).numpy())
结果:
0.71743906
0.5805602
如您所见,第二个示例(与真实值相同)得分较低(损失值较低,但仍然不是 0 或接近 0)。
看起来
似乎使用BinaryCrossentropy
损失函数不会给我们最好的结果。(我们永远不会得到接近零的值)?
最佳值会接近 0.5 吗?
我错过了什么?