我也想知道什么必须返回函数。
自定义指标可以在编译步骤中传递。
该函数需要将(y_true, y_pred) 作为参数并返回一个tensor 值。
但我不知道如何获取 if 和 else 的 res 值。
您可以从result_metric 函数返回result。
def custom_metric(y_true,y_pred):
result = K.abs((y_true-y_pred) / y_pred, axis = 1)
return result
第二步是使用keras 回调函数来查找错误的总和。
回调可以定义并传递给fit方法。
history = CustomLossHistory()
model.fit(callbacks = [history])
最后一步是创建CustomLossHistory 类,以便找出您预期的错误列表中的sum。
CustomLossHistory 将从keras.callbacks.Callback 继承一些默认方法。
-
on_epoch_begin:在每个 epoch 开始时调用。
-
on_epoch_end:在每个 epoch 结束时调用。
-
on_batch_begin:在每批开始时调用。
-
on_batch_end:在每批结束时调用。
-
on_train_begin:在模型训练开始时调用。
-
on_train_end:在模型训练结束时调用。
您可以在Keras Documentation阅读更多内容
但是对于这个例子,我们只需要on_train_begin 和on_batch_end 方法。
实施
class LossHistory(keras.callbacks.Callback):
def on_train_begin(self, logs={}):
self.errors= []
def on_batch_end(self, batch, logs={}):
loss = logs.get('loss')
self.errors.append(self.loss_mapper(loss))
def loss_mapper(self, loss):
if loss <= 0.1:
return 0
elif loss > 0.1 & loss <= 0.15:
return 5/3
elif loss > 0.15 & loss <= 0.2:
return 5
else:
return 2000
您的模型经过训练后,您可以使用以下语句访问您的错误。
errors = history.errors