相关疑难解决方法(0)

即使没有正则化,Keras Loss 和 Metric 中的相同函数也会给出不同的值

我正在为语义分割问题构建一个自定义 u-net,但我看到了一种奇怪的行为,loss并且metric在训练期间计算的方式有非常显着的差异。

在底部更新一个最小的可重现示例:

我已经阅读了这个 (1)这个 (2)另一个 (3)另一个 (4),但还没有找到合适的答案。

在训练模型时,我使用相同的函数 forloss和 for metric,结果差异很大。

第一个示例categorical_cross_entropy(我正在使用一个非常小的玩具套装来展示它):

from tensorflow.python.keras import losses

model.compile(optimizer='adam', loss=losses.categorical_crossentropy,
    metrics=[losses.categorical_crossentropy])
Run Code Online (Sandbox Code Playgroud)

我得到的输出是:

 4/4 [===] - 3s 677ms/step - loss: 4.1023 - categorical_crossentropy: 1.0256 
           - val_loss: 1.3864 - val_categorical_crossentropy: 1.3864
Run Code Online (Sandbox Code Playgroud)

如您所见,损失categorical_crossentropy大约是 4 倍。

如果我使用自定义指标,则差异是数量级的

from tensorflow.python.keras import backend as K
from tensorflow.python.keras.losses import categorical_crossentropy

def dice_cross_loss(y_true, y_pred, epsilon=1e-6, smooth=1): …
Run Code Online (Sandbox Code Playgroud)

python machine-learning deep-learning keras tensorflow

10
推荐指数
1
解决办法
1080
查看次数

为什么我在 TensorFlow Keras 中的损失函数和指标之间得到不同的值?

在我使用 TensorFlow 进行 CNN 训练时,我将其用作Keras.losses.poisson损失函数。现在,我喜欢与损失函数一起计算许多指标,并且我观察到这Keras.metrics.poisson给出​​了不同的结果 - 尽管两者是相同的函数。

请参阅此处的一些示例输出:loss输出poisson具有不同的范围,0.5 与 0.12:

Epoch 1/20
Epoch 00001: val_loss improved from inf to 0.53228, saving model to P:\Data\xyz.h5
 - 8174s - loss: 0.5085 - binary_crossentropy: 0.1252 - poisson: 0.1271 - mean_squared_error: 1.2530e-04 - mean_absolute_error: 0.0035 - mean_absolute_percentage_error: 38671.1055 - val_loss: 0.5323 - val_binary_crossentropy: 0.1305 - val_poisson: 0.1331 - val_mean_squared_error: 5.8477e-05 - val_mean_absolute_error: 0.0035 - val_mean_absolute_percentage_error: 1617.8346

Epoch 2/20
Epoch 00002: val_loss improved from 0.53228 to 0.53218, …
Run Code Online (Sandbox Code Playgroud)

keras tensorflow loss-function

8
推荐指数
1
解决办法
3927
查看次数