Keras CNN LSTM 的显着图(TF 后端)

Flo*_*wen 5 python backpropagation neural-network keras tensorflow

我试图从我的神经网络中获取显着图,但我有点挣扎。我的网络做 DNA 分类(类似于文本分类),顺序如下:Conv1D-> MaxPool-> Dropout-> Bidirectional LSTM-> Flatten-> Dense-> Dropout-> Dense。运行 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])
Run Code Online (Sandbox Code Playgroud)

但我遇到了错误消息 K.function

TypeError: Can not convert a list into a Tensor or Operation.
Run Code Online (Sandbox Code Playgroud)

我在这里缺少什么?我会尝试使用其他 API,但似乎没有很多文本可用,除了 DeepLIFT,它不支持 RNN 并且仍然使用 Keras 1.x。Keras-vis 中的文本实现在未来的某个地方。任何反馈表示赞赏!

cap*_*nst 0

我知道这是一个老问题,但试试这个:换行

saliency = keras.backend.gradients(keras.backend.sum(max_outp), inp)
Run Code Online (Sandbox Code Playgroud)

saliency = keras.backend.gradients(keras.backend.sum(max_outp), inp)[0]
Run Code Online (Sandbox Code Playgroud)

或者简单地

saliency = K.gradients(keras.backend.sum(max_outp), inp)[0]
Run Code Online (Sandbox Code Playgroud)