如何将张量流训练的CNN神经网络转换为lrp_toolbox_master的输入格式?

时间:2018-02-01 10:04:59

标签: tensorflow nlp deep-learning classification pickle

我使用python和tensorflow CNN进行文本分类。 lrp_toolbox是神经网络的解释模型,它将提供神经网络模型分类的原因,如“CNN”,“RNN”。  lrp_toolbox的输入是经过训练的“CNN”模型,其中包含以下format.

我不知道如何从张量流CNN的sess中制作此格式。 我试图挑选 sess 使用代码:

filename = 'trainedCNN_model_%s.pickle' % str(current_step) pickle.dump(sess, open(filename, 'wb'))

但它失败并显示TypeError: can't pickle module objects

实际上,我认为sess无法满足lrp_toolbox的输入格式。 lrp_toolbox 的示例输入是文本格式,如

Linear 2 3 -2.01595799878 -2.05379403106 0.688953420218 1.20338836267 -1.7518249173 -1.90515935663 -0.519917325831 0.400368842573 0.0699950389094 Tanh Linear 3 3 -1.18542075899 -1.62921811225 0.134698917906 0.111469267787 1.85227669488 -0.350827317469 0.102194311719 -1.67678396935 0.256312518679 0.116095097279 -0.0138454065897 0.0469443958438 Tanh Linear 3 2 1.10940574175 0.26799513777 2.51842248017 -1.5497671807 -0.606042655911 0.197763706892 -0.115832556216 0.115832556216 SoftMax 以下是manuallrp_toolbox

2 个答案:

答案 0 :(得分:0)

当你需要通过pickle序列化对象时,你需要实现一些方法。

  

TypeError:无法pickle模块对象。   正如此错误消息解释,sess不是用于序列化sess对象的实现方法。而且,我看不出sess有什么价值。   你能解释一下你是如何制作的吗?

参考)https://docs.python.org/3/library/pickle.html

答案 1 :(得分:0)

一旦你有一个经过训练的神经网络模型(用Tensorflow或其他一些神经网络工具箱训练),你基本上只有一组权重和偏差作为浮点值。

现在,为了将此模型转换为lrp_toolbox的纯文本文件格式,以便随后可以使用Python Implementation of the lrp_toolbox解释您的模型,您只需手动编写一个函数即可按照manual中第16-17页的共享纯文本文件格式部分中所述的格式,将模型权重+偏差保存在纯文本文件中。

这意味着,你必须编写一个与lrp_toolbox的函数_write_txt(model, path)非常相似的函数,它将第一个输入称为训练有素的Tensorflow模型,第二个输入作为输出文本文件路径,并以人类可读的原始文本写入此输出文件中的所有权重+偏差(以及模型的其他图层的序列:池和激活)。

然后,您可以使用类似model_io.read('my_model.txt')的内容在lrp_toolbox中加载模型,并对某些数据执行LRP(对于读取数据,您可以使用data_io.read('my_input'))。查看完整用法示例here