Keras实例:自定义损失函数/指标函数

在训练模型的时候,Keras提供了许多损失函数供我们使用,但是即便如此,我们也会有遇到需要用自己的损失函数的情况,这样我们就要自定义一个损失函数。比如我现在需要定义一个损失函数,类似于relu函数,低于threshold的loss为0,大于threshold的loss就是他们之间的差。注意我们在定义损失函数的时候,必须可以求导。任何损失函数必须有y_true, y_pred两个参数,他们的类型为tensor。

def relu_loss(y_true, y_pred, threshold = 1):
	if not K.is_tensor(y_pred):
		y_pred = K.constant(y_pred)
	y_true = K.cast(y_true, y_pred.dtype)
	return K.sum(K.cast(K.greater(K.abs(y_pred - y_true), threshold), K.floatx()) * K.abs(y_pred - y_true))

在定义完之后,我们就可以通过名字把损失函数和指标函数给模型了。

model.compile(optimizer='rmsprop', loss=relu_loss, metrics=[relu_loss])

要注意的是,我们在重新读取模型的时候,因为我们自定义了损失函数和指标函数,所以我们在用load_model的时候,必须通过custom_objects参数声明这些函数名字代表了什么。

model = load_model('linear.model', custom_objects={'relu_loss': relu_loss})

可以看到这个损失函数在高学习率下收敛的非常快。

Epoch 10/300
8/8 [==============================] - 0s 4ms/step - loss: 0.0000e+00 - relu_loss: 0.0000e+00 - val_loss: 0.0000e+00 - val_relu_loss: 0.0000e+00

以上就是如何通过Keras自定义损失函数和指标函数了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值