我正试图从神经网络中获取显着性图,但我正在努力。我的网络进行DNA分类(类似于文本分类),并按顺序如下:Conv1D-> MaxPool-> Dropout->双向LSTM-> Flatten-> Dense-> Dropout->稠密。运行Keras 2.06,Tensorflow 1.2.1。我从https://github.com/fchollet/keras/issues/1777获得的主要代码如下:
def compile_saliency_function(model):
"""
Compiles a function to compute the saliency maps and predicted classes
for a given minibatch of input images.
"""
inp = model.layers[0].input
outp = model.layers[-1].output
max_outp = K.max(outp, axis=1)
saliency = keras.backend.gradients(keras.backend.sum(max_outp), inp)
max_class = K.argmax(outp, axis=1)
return K.function([inp], [saliency, max_class])
sal = compile_saliency_function(model)([x_test[1], 0])
但是我遇到了来自K.function
TypeError: Can not convert a list into a Tensor or Operation.
我在这里缺少什么?我会尝试使用其他API,但似乎除了DeepLIFT之外,还有很多文本,除了DeepLIFT,它不支持RNN并且仍然使用Keras 1.x. Keras-vis中的文本实现在未来的某个地方。任何反馈表示赞赏!
答案 0 :(得分:0)
我知道这是一个老问题,但是请尝试以下操作: 更改行
saliency = keras.backend.gradients(keras.backend.sum(max_outp), inp)
到
saliency = keras.backend.gradients(keras.backend.sum(max_outp), inp)[0]
或者简单地
saliency = K.gradients(keras.backend.sum(max_outp), inp)[0]