快速可微分排序算法PyTorch包,配有自定义C ++和CUDA,性能更好
机器之心报道
编辑:陈萍
有人将快速可微分排序算法打包实现,性能还不错。
项目地址:https://github.com/teddykoker/torchsort
《Fast Differentiable Sorting and Ranking》论文地址:https://arxiv.org/pdf/2002.08871.pdf
pip install torchsort
import torch
import torchsort
x = 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 torch
import torchsort
def 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 定向 铺路 再夯实 7950738
- 2 五位“掌门人”发声 信息量巨大 7911647
- 3 雷军:成功来得猝不及防 7843033
- 4 实现5%左右经济增速 底气何在 7711667
- 5 男子在杭州太子山意外拍到黄山 7644295
- 6 代表说0补课0月考孩子成绩都是A 7580823
- 7 男子离婚拿走前妻7个大牌包 7439464
- 8 Manus创始人是中国90后 7369299
- 9 中国制造遭质疑女主播全英文回怼 7262782
- 10 2030年前后我国将实施火星采样返回 7113188