作为入门练习,我在Keras中制作了一个非常简单的NN模型为我做一些非线性回归。我在这里上传了我的jupyter notebookit作为要点(在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))
Run Code Online (Sandbox Code Playgroud)
我想估计相对于输入x的输出y的导数,例如x = 0.5。
我所有基于搜索过去的答案来提取梯度值的尝试都导致了语法错误。从较高的角度来看,这是Keras的受支持功能,还是任何解决方案都将特定于后端?