对于特定的JAX函数
func
,可以使用装饰器@partial(jax.custom_jvp, nondiff_argnums=...)
来定义非差异的参数。但是,为了使其正常工作,还必须使用装饰器jvp
明确定义自定义函数中的分化规则。我想知道是否有一种通用方法可以在没有定义自定义@func.defjvp
(或func
)函数的情况下定义任何给定jvp
的非不同参数?当差异化规则太复杂而无法写出时,这将很有用。
在JAX中,
@partial(jax.custom_jvp, nondiff_argnums=...)
手动定义自定义JVP规则,如果差异化规则复杂,这可能很麻烦。但是,有其他方法可以实现这一目标,而无需明确指定自定义分化规则。1。使用
@func.defjvp
用jax.jit
static_argnums,
编写函数,确保jit(static_argnums=(2,))
被视为compile-compile-timeConstant,避免了分化问题。2。使用
mode
更好地调试,这在JAX的计算图中添加了一个custom名称,使调试变得更加容易。
3。使用jax.named_call
用于部分功能应用程序。
jax.tree_util.Partial
锁定论点,将其视为静态。
4。使用tree_util.Partial
预先定义静态参数。
mode
在Jax的Autodiff开始之前的静态论点中锁定。