自定义损失 - 硬
custom loss - keras
以下两个 models/compilations 行为不同:
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'])
并且:
optimizer = Adam(lr=5e-3)
model.compile(loss=keras.losses.binary_crossentropy, optimizer=optimizer, metrics=['accuracy'])
可能是什么原因?
如果您实施自定义二元交叉熵损失,您还应该指定正确的准确度指标。这是因为如果您使用 Keras 的二元交叉熵,那么 Keras 将自动调整要使用的精度指标(在二元精度和分类精度之间)。
如果您使用自定义损失,则不会发生这种情况,然后 Keras 将默认为分类精度,这实际上是错误的,会产生不正确的精度值。例如:
model.compile(loss=custom_loss, optimizer=optimizer, metrics=['binary_accuracy'])
以下两个 models/compilations 行为不同:
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'])
并且:
optimizer = Adam(lr=5e-3)
model.compile(loss=keras.losses.binary_crossentropy, optimizer=optimizer, metrics=['accuracy'])
可能是什么原因?
如果您实施自定义二元交叉熵损失,您还应该指定正确的准确度指标。这是因为如果您使用 Keras 的二元交叉熵,那么 Keras 将自动调整要使用的精度指标(在二元精度和分类精度之间)。
如果您使用自定义损失,则不会发生这种情况,然后 Keras 将默认为分类精度,这实际上是错误的,会产生不正确的精度值。例如:
model.compile(loss=custom_loss, optimizer=optimizer, metrics=['binary_accuracy'])