paddle复现pytorch踩坑(八):smooth_l1的用法

fluid.layers.smooth_l1

  • 作用:该layer计算变量 x 和 y 的smooth L1 loss,它以 x 和 y 的第一维大小作为批处理大小。对于每个实例,按元素计算smooth L1 loss,然后计算所有loss。输出变量的形状是[batch_size, 1]
  • 链接:pp飞桨API说明

问题一:输入数据类型

# pytorch code
loss_bbox_x = F.smooth_l1_loss(bbox_x[active], bbox_x_tar[active], reduction='none')
    
# paddlepaddle code
loss_bbox_x = fluid.layers.smooth_l1(bbox_x[active], bbox_x_tar[active])

报错:Smooth_L1 只能用’float32’, 且输入shape与torch不能,rank>1
解决:

# paddlepaddle code
loss_bbox_x = fluid.layers.smooth_l1(fluid.layers.cast(fluid.layers.unsqueeze(fluid.layers.gather(bbox_x, index), 0), 'float32'),
                                     fluid.layers.cast(fluid.layers.unsqueeze(fluid.layers.gather(bbox_x_tar, index), 0), 'float32'))

问题二:注意输出的维度

输出loss shape 为 [1, 1]

# paddlepaddle code
loss_bbox_x = fluid.layers.smooth_l1(fluid.layers.reshape(fluid.layers.gather(bbox_x, index_active), [1, -1]),
                                     fluid.layers.reshape(fluid.layers.gather(bbox_x_tar, index_active), [1, -1]))

输出loss shape 为[N, 1]

# paddlepaddle code
loss_bbox_x = fluid.layers.smooth_l1(fluid.layers.reshape(fluid.layers.gather(bbox_x, index_active), [-1, 1]),
                                     fluid.layers.reshape(fluid.layers.gather(bbox_x_tar, index_active), [-1, 1]))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值