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

时间:2017-08-13 18:57:43

标签: python tensorflow neural-network keras backpropagation

我正试图从神经网络中获取显着性图,但我正在努力。我的网络进行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中的文本实现在未来的某个地方。任何反馈表示赞赏!

1 个答案:

答案 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]