首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在深度学习模型中,如何获得输出相对于输入的偏导数?

在深度学习模型中,如何获得输出相对于输入的偏导数?
EN

Stack Overflow用户
提问于 2019-03-14 13:52:50
回答 2查看 1K关注 0票数 0

我想在keras中创建自己的损失函数,它包含导数。例如,

def my_loss(x):
    def y_loss(y_true,y_pred):
        res = K.gradients(y_pred,x)
        return res
    return y_loss

已定义,并且

model = Sequential()
model.add(Dense(10, input_dim=2, activation='sigmoid'))
model.add(Dense(1, activation='linear'))
model_loss = my_loss(x=model.input)
model.compile(loss=model_loss, optimizer='adam')

现在因为输入是二维的,

K.gradients(y_pred,x)

必须是二维向量。然而,我不知道如何在梯度中获得每个标量。我最终想要的是y_pred对x的所有二阶导数,有没有方便的方法来得到?

它类似于this post,但这篇文章将二维变量分离为两个一维变量。有没有其他方法可以在不分离输入的情况下获得梯度?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-23 19:13:12

不幸的是,Keras没有一种方便的方法来获得梯度的每个分量。因此,我使用tensorflow解决了这个问题。

如果f如果对象函数带有变量x=(x1,x2)

X=tf.placeholder(tf.float32,shape=(None,2))
f=f(X)#assume it is defined'

则df/dx_1为

tf.gradients(f,x)[0][:,0]

df/dx_2是

tf.gradients(f,x)[0][:,1]

d^2f/dx_1^2是

tf.gradietns(tf.gradients(f,x))[0][:,0]

d^2f/dx_2^2是

tf.gradietns(tf.gradients(f,x))[0][:,1]

d^2f/dx_1dx_2是

tf.gradietns(tf.gradients(f,x)[0][:,0])[0][:,1]

我相信有更好的方法,但我找不到。

票数 0
EN

Stack Overflow用户

发布于 2019-03-14 15:52:30

如果你想要拉普拉斯式,为什么不使用tf.hessians,它有所有的二阶导数?拉普拉斯矩阵应等于Hessian矩阵的迹(通过单位)

https://www.tensorflow.org/api_docs/python/tf/hessians

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55155784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档