来自Theano表达式的梯度,用于Keras中的滤波器可视化

pir*_*pir 5 python scipy theano deep-learning keras

对于ConvNet,找到最大化单个转换活动的范数有界输入会很有趣.过滤器可视化过滤器.我想在深度学习包Keras中做到这一点.这可以使用黑盒优化算法和FAQ中的代码来完成.

# 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)
Run Code Online (Sandbox Code Playgroud)

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

1''*_*1'' 2

您可以按照此处所述打印出渐变,并将其手动编码到 Scipy 中。您还可以在 Theano 中进行优化 - 请参阅此问题

然而,最直接的方法可能是创建一个函数get_gradients(),用于theano.grad()返回滤波器相对于输入的梯度,然后使用 进行scipy.optimize.minimize调用jac=get_gradients。根据文档

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