我正在为语义分割问题构建一个自定义 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)