You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Keras中计算n维函数的n阶导数?附二元函数示例

计算二元函数的n阶导数(Keras实现)

针对你提到的二元函数(比如z = x² + y²),下面是用Keras的Lambda层计算任意n阶导数的完整实现方案,我会把逻辑拆解开讲清楚:

1. 定义目标二元函数

首先我们用Keras的层来构建目标函数,这样才能利用Keras的自动求导能力:

from keras.layers import Lambda, Add
import keras.backend as K

def bivariate_function(x, y):
    x_squared = Lambda(lambda u: K.pow(u, 2))(x)
    y_squared = Lambda(lambda u: K.pow(u, 2))(y)
    return Add()([x_squared, y_squared])

这里我把原代码里的y3改成了y_squared,修正了笔误,更贴合x² + y²的函数逻辑。

2. 构建通用导数计算函数

接下来写一个可复用的导数计算函数,用Lambda层封装Keras的K.gradients()接口:

def compute_derivative(output, input_tensor):
    # 用Lambda层包装梯度计算,返回导数张量
    return Lambda(lambda u: K.gradients(u[0], u[1]))([output, input_tensor])

原代码里函数名和调用名不一致(函数叫derivative却用grad调用),这里统一成compute_derivative,避免混淆。

3. 计算各阶导数的示例

先定义输入张量,再逐层计算各阶导数:

from keras.layers import Input

# 定义输入张量
x = Input(shape=(1,))
y = Input(shape=(1,))

# 计算原函数
f = bivariate_function(x, y)

# 一阶导数
df_dx = compute_derivative(f, x)  # 对应2x
df_dy = compute_derivative(f, y)  # 对应2y

# 二阶导数
df_dx2 = compute_derivative(df_dx, x)  # 对应2
df_dy2 = compute_derivative(df_dy, y)  # 对应2

# 更高阶导数以此类推,比如三阶导数就是对二阶导数再求导
df_dx3 = compute_derivative(df_dx2, x)  # 对应0

关键说明

  • Keras的K.gradients()会返回一个列表,所以Lambda层的输出也是列表形式,如果需要单个张量,可以修改函数为return Lambda(lambda u: K.gradients(u[0], u[1])[0])
  • 所有运算必须使用Keras后端(K.*)的函数,不能用原生Python或NumPy运算,否则无法追踪梯度计算图

内容的提问来源于stack exchange,提问作者Lucas Farias

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:38:52