gpt4 book ai didi

python - 访问 keras 模型输出相对于输入的梯度值

转载 作者:行者123 更新时间:2023-11-30 08:28:55 24 4
gpt4 key购买 nike

我制作了一个非常简单的神经网络模型,在 Keras 中为我做一些非线性回归,作为介绍练习。我上传了我的 Jupyter Notebookit 作为要点 here (在 github 上正确渲染),非常简短,切中要点。

它正好符合一维函数 y = (x - 5)^2/25。

我知道 Theano 和 Tensorflow 的核心是基于图的导数(梯度)传递框架。利用损失函数相对于权重的梯度进行基于梯度步长的优化是其主要目的。

但是我想要了解的是,在给定训练模型的情况下,我是否能够访问一些可以近似输入相对于我的输出层的导数(而不是权重或损失函数)的东西。因此,对于这种情况,我希望通过网络的导数图估计 y' = 2(x-5)/25.0,以获取网络当前训练状态下输入 x 的指示值。

我在 Keras 或 Theano/TF 后端 API 中是否有任何选项来执行此操作,或者我是否需要以某种方式使用权重进行自己的链规则(或者可能添加我自己的不可训练的“身份”层或某物)?在我的笔记本中,您可以看到我根据迄今为止找到的方法尝试了几种方法,但没有取得很大成功。

为了具体起见,我有一个工作的 keras 模型,其结构如下:

model = Sequential()
# 1d input
model.add(Dense(64, input_dim=1, activation='relu'))
model.add(Activation("linear"))
model.add(Dense(32, activation='relu'))
model.add(Activation("linear"))
model.add(Dense(32, activation='relu'))
# 1d output
model.add(Dense(1))

model.compile(loss='mse', optimizer='adam', metrics=["accuracy"])
model.fit(x, y,
batch_size=10,
epochs=25,
verbose=0,
validation_data=(x_test, y_test))

我想估计输出 y 相对于输入 x 的导数,例如 x = 0.5。

我所有基于搜索过去答案来提取梯度值的尝试都导致了语法错误。从高层次的角度来看,这是 Keras 支持的功能,还是有任何解决方案将针对后端?

最佳答案

正如您提到的,Theano 和 TF 是象征性的,因此做导数应该很容易:

import theano
import theano.tensor as T
import keras.backend as K
J = T.grad(model.output[0, 0], model.input)
jacobian = K.function([model.input, K.learning_phase()], [J])

首先计算给定输入的输出的符号梯度 (T.grad),然后构建一个可以调用的函数并进行计算。请注意,有时由于形状问题,这并不是那么简单,因为输入中的每个元素都会得到一个导数。

关于python - 访问 keras 模型输出相对于输入的梯度值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44444475/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com