我使用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
以下是manual的lrp_toolbox。
答案 0 :(得分:0)
当你需要通过pickle序列化对象时,你需要实现一些方法。
TypeError:无法pickle模块对象。 正如此错误消息解释,sess不是用于序列化sess对象的实现方法。而且,我看不出sess有什么价值。 你能解释一下你是如何制作的吗?
答案 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。