加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-12-20 13:19:13 所属栏目:Python 来源:网络整理
导读:我试图从我的神经网络中获取显着性图,但我正在努力.我的网络进行DNA分类(类似于文本分类),并按顺序如下:Conv1D- MaxPool- Dropout-双向LSTM- Flatten- Dense- Dropout-稠密.运行Keras 2.06,Tensorflow 1.2.1.我从 https://github.com/fchollet/keras/issues
我试图从我的神经网络中获取显着性图,但我正在努力.我的网络进行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中的文本实现在未来的某个地方.任何反馈表示赞赏!

解决方法

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

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]

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读