【发布时间】:2017-06-08 19:54:03
【问题描述】:
我做了一个非常简单的 NN 模型,在 Keras 中为我做一些非线性回归,作为介绍练习。我将我的 jupyter notebookit 作为 gist 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 支持的功能,还是任何解决方案都将是特定于后端的?
【问题讨论】:
标签: python machine-learning tensorflow keras theano