python实现可在GPU运行修正的第一类贝塞尔函数

本文介绍了如何在Python中实现一个可在GPU上运行且可求梯度的修正第一类贝塞尔函数,以适应深度学习的需求。内容包括CPU版和GPU版的0阶、1阶函数实现,以及指数缩放的修正函数,通过torch库实现对贝塞尔函数的求导。
摘要由CSDN通过智能技术生成

Python的Scipy库里边是有修正的贝塞尔函数scipy.special.i0的,但是它只是一个数值计算的过程。在深度学习需要用到贝塞尔函数的时候,显然scipy.special.i0并不能对其求梯度,因此本人根据网上资料手撸了一个可对其求梯度的修正的贝塞尔函数,同时它可在CPU或是GPU上运行。

修正的第一类贝塞尔函数(CPU版)

如下是修正的第一类贝塞尔函数(0阶)

// Bessel_i0() 相当于 scipy.special.i0() 
def Bessel_i0(a):    //ver7.0 modify bessel function  
    temp = torch.zeros(a.shape).type(torch.float64) 
    
    y = a[abs(a)<3.75]/3.75 
    y = y**2
    ans = 1.0 + y * (3.5156229 + y * (3.0899424 + y * (1.2067492 + y * (0.2659732 + y * (0.360768e-1 + y * 0.45813e-2)))))
    temp[abs(a)<3.75] = ans.type(torch.float64)  
   
    y = 3.75/a[abs(a)>=3.75]
    y.type(dtype)
    ans = (torch.exp(a[abs(a)>=3.75]) / torch.sqrt(a[abs(a)>=3.75]))*(0.39894228 + y * (0.1328592e-1 + y * (0.225319e-2 + y * (-0.157565e-2 + y * (0.916281e-2 + y * (-0.2057706e-1 + y * (0.2635537e-1 + y * (-0.1647633e-1 + y * 0.392377e-2)))))))) 
    temp[abs(a)>=3.75] = ans.type(torch.float64)  
    
    return temp

如下是修正的第一类贝塞尔函数(1阶)


                
  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值