相关疑难解决方法(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
查看次数

Keras - 损失和指标计算方式不同?

我在Keras有一个模型,我正在优化均方误差.但是,如果我losses.py在度量标准中使用与Keras中相同的代码,则会得到不同的结果.为什么是这样?

作为指标:

def MSE_metric(y_true, y_pred):
    return K.mean(K.square(y_pred, y_true))
Run Code Online (Sandbox Code Playgroud)

对于模型:

model.compile(optimizer=SGD(lr=0.01, momntum=0.9), loss='MSE', metrics=[MSE_metric])
Run Code Online (Sandbox Code Playgroud)

这导致损失6.07但MSE_metric为0.47

python metric loss neural-network keras

6
推荐指数
1
解决办法
821
查看次数

验证MSE损失与验证MSE指标不同

我用Keras(带有theano后端)编写了一个模型,并像这样编译我的模型:model.compile(Adam(0.001), loss='mse', metrics=['mse', 'mae'])即,我的目标损失函数是均方误差,要报告的指标是均方误差均绝对误差

然后运行我的模型: model.fit(X_train, y_train, nb_epoch=500, validation_data=(X_test, y_test))

Keras将结果报告为:

时代500/500:0s-损失:5.5990-mean_squared_error:4.4311-mean_absolute_error:0.9511-val_loss:7.5573-val_mean_squared_error:6.3877-val_mean_absolute_error:1.1335

我期望val_lossval_mean_squared_error相同。什么是val_loss这里如果不val_mean_squared_error

neural-network keras

5
推荐指数
0
解决办法
869
查看次数