Python Keras中滤波器可视化的Theano表达式梯度

Python Keras中滤波器可视化的Theano表达式梯度,python,scipy,theano,deep-learning,keras,Python,Scipy,Theano,Deep Learning,Keras,对于ConvNet来说,找到范数有界的输入是一件有趣的事情,它可以最大化单个conv.过滤器的活动,作为一种解决问题的方法。我想在深度学习包Keras中这样做。这可以通过使用黑盒优化算法和来自的代码来实现 然而,如果我有梯度,这将是一个非常容易的优化任务。如何从Theano表达式中提取渐变并将其输入Python优化库(如Scipy?您可以按说明打印渐变并将其手工编码到Scipy中。您也可以在Theano-see中进行优化 但是,最直接的方法可能是创建一个函数get_gradients(),该函数

对于ConvNet来说,找到范数有界的输入是一件有趣的事情,它可以最大化单个conv.过滤器的活动,作为一种解决问题的方法。我想在深度学习包Keras中这样做。这可以通过使用黑盒优化算法和来自的代码来实现


然而,如果我有梯度,这将是一个非常容易的优化任务。如何从Theano表达式中提取渐变并将其输入Python优化库(如Scipy?

您可以按说明打印渐变并将其手工编码到Scipy中。您也可以在Theano-see中进行优化

但是,最直接的方法可能是创建一个函数
get_gradients()
,该函数使用
theano.grad()
返回过滤器相对于输入的梯度,然后调用
scipy.optimize.minimize
使用
jac=get_gradients
。根据报告:

jac:bool或可调用的可选目标雅可比(梯度) 功能。[…]jac也可以是一个可调用函数,返回 目标。在这种情况下,它必须接受与fun相同的参数


谢谢我理解
theano.grad()
背后的基本思想,但是如何提取Keras模型的损失梯度?基于此,我已经看到了如何使用一些输入
X_train
来实现这一点,但我还没有想到如何弥补损失。我的两个问题是1)我似乎无法提取连接到网络的损耗函数2)这个新函数需要
X_-train
y_-train
,我似乎无法以正确的方式提供。Keras已经在反向传播期间计算了每一层的损耗梯度。但是你不想要中间层相对于输入的梯度吗?啊,是的。对不起,我已经有一段时间没问这个问题了。你的答案解决了这个问题。我当前的问题是如何提取所有参数wrt的梯度。损失,因为我想检查梯度剪辑的需要。从Keras中实现的backprop provedure中很容易获得吗?我不认为这是Keras中内置的,但您可以按照Keras优化器使用的过程进行操作-查看位于的优化器类的get_gradients方法。您知道如何使用tensorflow作为后端来实现这一点吗?我得到梯度的所有零<代码>模型是一个简单的前馈模型。计算第一层中第一个单元的激活度:
gradient\u unit0\u wrt\u input=K.tf.slice(model.layers[1]。output,begin=[0,0],size=[0,-1])
Compute gradient:对一些
数据进行评估
得到所有0:
和K.get\u session().as\u default():打印(gradient\u unit0\u wrt\u input.eval(feed\u dict={model.input:data,}))
# with a Sequential model
get_3rd_layer_output = theano.function([model.layers[0].input],
                                       model.layers[3].get_output(train=False))
layer_output = get_3rd_layer_output(X)