如何使用张量流可训练变量优化贝塞尔函数的近似值?

问题描述

我正在做一个项目,在该项目中我使用了第一类 Jn(x) 的贝塞尔函数。 变量 x 必须是在我的自定义层中声明的可训练 tensorflow 变量,如下所示:

self.x = self.add_weight(name="x",shape=(1,),initializer="random_normal",trainable=True)

由于 scipy.special.jn(n = 0,self.x) 抛出“NotImplementedError: numpy() 仅在启用急切执行时可用。”我只是自己创建了贝塞尔函数的近似值(参见 Wikipedia):

def tf_bessel(n: int,x: tf.float64):
    sol = 0.0
    for r in range(0,100):
        sol += 1.0 * ((-1) ** r) * ((x/2) ** (2 * r + n)) * (1/(tf_factorial(float(n + r)) * tf_factorial(float(r))))
    return 0.0 if (tf.math.is_nan(sol)) else sol

def tf_factorial(x: float):
    n = tf.constant(x)
    return tf.math.exp(tf.math.lgamma(n+1))

由于这不会很快起作用,我正在寻找有关如何改进此代码的任何建议。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)