快速可微分排序算法PyTorch包,配有自定义C ++和CUDA,性能更好
机器之心报道
编辑:陈萍
有人将快速可微分排序算法打包实现,性能还不错。

项目地址:https://github.com/teddykoker/torchsort
《Fast Differentiable Sorting and Ranking》论文地址:https://arxiv.org/pdf/2002.08871.pdf
pip install torchsortimport torchimport torchsortx = torch.tensor([[8, 0, 5, 3, 2, 1, 6, 7, 9]])torchsort.soft_sort(x, regularization_strength=1.0)# tensor([[0.5556, 1.5556, 2.5556, 3.5556, 4.5556, 5.5556, 6.5556, 7.5556, 8.5556]])torchsort.soft_sort(x, regularization_strength=0.1)# tensor([[-0., 1., 2., 3., 5., 6., 7., 8., 9.]])torchsort.soft_rank(x)# tensor([[8., 1., 5., 4., 3., 2., 6., 7., 9.]])
x = torch.tensor([[8., 0., 5., 3., 2., 1., 6., 7., 9.]], requires_grad=True).cuda()y = torchsort.soft_sort(x)torch.autograd.grad(y[0, 0], x)# (tensor([[0.1111, 0.1111, 0.1111, 0.1111, 0.1111, 0.1111, 0.1111, 0.1111, 0.1111]],# device='cuda:0'),)
import torchimport torchsortdef spearmanr(pred, target, **kw):pred = torchsort.soft_rank(pred, **kw)target = torchsort.soft_rank(target, **kw)pred = pred - pred.mean()pred = pred / pred.norm()target = target - target.mean()target = target / target.norm()return (pred * target).sum()pred = torch.tensor([[1., 2., 3., 4., 5.]], requires_grad=True)target = torch.tensor([[5., 6., 7., 8., 7.]])spearman = spearmanr(pred, target)# tensor(0.8321)torch.autograd.grad(spearman, pred)# (tensor([[-5.5470e-02, 2.9802e-09, 5.5470e-02, 1.1094e-01, -1.1094e-01]]),)


建新·见智 —— 2021亚马逊云科技 AI 在线大会
4月22日 14:00 - 18:00
识别二维码或点击阅读原文,免费报名看直播。

??THE END?
转载请联系本公众号获得授权
投稿或寻求报道:content@jiqizhixin.com
关注公众号:拾黑(shiheibook)了解更多
[广告]赞助链接:
四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/
关注网络尖刀微信公众号随时掌握互联网精彩
赞助链接
排名
热点
搜索指数
- 1 锚定推动高质量发展这个主题 7903930
- 2 国台办回应韩国标示“中国台湾” 7808516
- 3 警方通报“小鹏汽车车展不雅视频” 7713381
- 4 中国时速350公里高铁最长隧道贯通 7615862
- 5 大疆回应多地无人机黑飞至8000米 7521302
- 6 西班牙女员工连续提前到岗被开除 7428056
- 7 央视马年春晚官宣 7328213
- 8 片仔癀4年跌60% 投资大佬仍一股不卖 7236950
- 9 女生每天一杯奶茶可乐尿酸值破700 7142575
- 10 制器之器!厉害了工业母机 7039699







机器之心
