Keras 海关损失-克瑞斯

Keras 海关损失-克瑞斯,keras,loss,Keras,Loss,以下两种模型/编译的行为不同: def custom_loss(y_true, y_pred): return keras.losses.binary_crossentropy(y_true, y_pred) optimizer = Adam(lr=5e-3) model.compile(loss=custom_loss, optimizer=optimizer, metrics=['accuracy']) 以及: 原因是什么?如果实现自定义二进制交叉熵损失,还应指定正确的精度度量。这是

以下两种模型/编译的行为不同:

def custom_loss(y_true, y_pred):
  return keras.losses.binary_crossentropy(y_true, y_pred)

optimizer = Adam(lr=5e-3)
model.compile(loss=custom_loss, optimizer=optimizer, metrics=['accuracy'])
以及:


原因是什么?

如果实现自定义二进制交叉熵损失,还应指定正确的精度度量。这是因为如果您使用Keras的二进制交叉熵,那么Keras将自动调整要使用的精度度量(在二进制精度和分类精度之间)

如果使用自定义损失,则不会发生这种情况,然后Keras将默认为分类精度,这实际上是错误的,会产生错误的精度值。例如:

model.compile(loss=custom_loss, optimizer=optimizer, metrics=['binary_accuracy'])

你能解释一下你所说的“不同”是什么意思吗?当我观察训练时,我看到不同的损失数字(和准确性)。真的不同,自定义损耗不起作用,而出厂损耗起作用。我无法重现问题。两者产生完全相同的输出。我使用了
Keras 2.2.4.1
MxNet 1.5.0
(CPU版本)Ubuntu 16.04和Python3的后端。你在使用什么工具?你观察到了什么不同?我使用的是mac、Python3和Jupyter笔记本。我的目标是多标签(117个二进制文件)@Oren你是在用同样的洗牌方式使用你的数据吗?还有,你是在播种你的网络,使随机初始化完全相同吗?在神经网络中可能有很多不同的东西导致随机性。
model.compile(loss=custom_loss, optimizer=optimizer, metrics=['binary_accuracy'])