快速可微分排序算法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 总书记深深牵挂雪域高原上的人们 4959460
- 2 雷军公布价格 现场车企大佬反应亮了 4910504
- 3 23省份人口数据出炉 4825466
- 4 抓住“热辣滚烫”的“春日经济” 4794973
- 5 万科郁亮月薪降至1万 曾年薪千万 4666684
- 6 女骑手半个月偷吃40多份外卖 4526376
- 7 雷军把小爱同学喊崩了 4465247
- 8 小米首款汽车起售21.59万 贵吗? 4395766
- 9 面具男用病毒针扎人系谣言 4288078
- 10 江苏681万大奖得主彩票被洗得稀碎 4177845