| 12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- #copyright (c) 2021 PaddlePaddle Authors. All Rights Reserve.
- #
- #Licensed under the Apache License, Version 2.0 (the "License");
- #you may not use this file except in compliance with the License.
- #You may obtain a copy of the License at
- #
- # http://www.apache.org/licenses/LICENSE-2.0
- #
- #Unless required by applicable law or agreed to in writing, software
- #distributed under the License is distributed on an "AS IS" BASIS,
- #WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- #See the License for the specific language governing permissions and
- #limitations under the License.
- import paddle
- import paddle.nn as nn
- import paddle.nn.functional as F
- from paddle.nn import L1Loss
- from paddle.nn import MSELoss as L2Loss
- from paddle.nn import SmoothL1Loss
- class DistanceLoss(nn.Layer):
- """
- DistanceLoss:
- mode: loss mode
- """
- def __init__(self, mode="l2", **kargs):
- super().__init__()
- assert mode in ["l1", "l2", "smooth_l1"]
- if mode == "l1":
- self.loss_func = nn.L1Loss(**kargs)
- elif mode == "l2":
- self.loss_func = nn.MSELoss(**kargs)
- elif mode == "smooth_l1":
- self.loss_func = nn.SmoothL1Loss(**kargs)
- self.mode = mode
- def forward(self, x, y):
- loss = self.loss_func(x, y)
- return {"loss_{}".format(self.mode): loss}
|