1.前言
损失函数是是用来估量你模型的预测值f(x)与真实值Y的不一致程度。
不同的损失函数对模型拟合会有不同的效果,损失函数越小,一般模型的鲁棒性就越好。
在深度学习中,我们经常需要调整损失函数来达到一些效果倾斜的目的。
2.十行代码自定义损失函数
import paddle
class MyLoss(paddle.nn.Layer):
def __init__(self):
super().__init__()
def forward(self, x, label):
# 使用paddle内置的cross_entropy算子实现算法
loss = paddle.nn.functional.cross_entropy(x,label)
label = paddle.cast(label[0],dtype='float32')
loss1 = paddle.nn.functional.square_error_cost(x[:,1],label)
loss = 0.7*loss + 0.3*loss1
return loss
如上,一个二分类问题,我们即使用了交叉熵损失,又使用了均方损失,并赋予两个损失不同的权重。
由于交叉熵损失与均方损失需要的输入不一样,所以对label进行了cast处理。
下面验证一下:
myloss = MyLoss()
x = paddle.to_tensor([[0.0,0.9]])
label = paddle.to_tensor([[1]])
loss = myloss(x,label)
print(loss)
loss.backward()
打印结果:Tensor(shape=[1], dtype=float32, place=Place(cpu), stop_gradie