tensorflow训练好的CNN神经网络如何转成lrp_toolbox_master的输入格式?

Posted

技术标签:

【中文标题】tensorflow训练好的CNN神经网络如何转成lrp_toolbox_master的输入格式?【英文标题】:How to transfer the tensorflow trained CNN neural network to the input format of lrp_toolbox_master? 【发布时间】:2018-07-11 14:48:09 【问题描述】:

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

我不知道如何从 tensorflow CNN 的sessgraph 制作这种格式。 我尝试腌制 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 这是lrp_toolbox 的manual。

【问题讨论】:

【参考方案1】:

一旦你有了一个训练有素的神经网络模型(无论是用 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。

【讨论】:

【参考方案2】:

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

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

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

【讨论】:

sess 是一个用于运行 TensorFlow 操作的类。 [链接]tensorflow.org/api_docs/python/tf/Session[link] sess = tf.Session(config=session_conf) with sess.as_default(): 据我了解,lrp_toolbox 能够从 pickle 格式加载经过训练的模型。因此,您需要了解如何通过 tensorflow 保存为 pickle 格式。参考)tensorflow.org/programmers_guide/saved_model

以上是关于tensorflow训练好的CNN神经网络如何转成lrp_toolbox_master的输入格式?的主要内容,如果未能解决你的问题,请参考以下文章

使用Python,Keras和TensorFlow训练第一个CNN

基于CNN卷积神经网络的TensorFlow+Keras深度学习的人脸识别

tensorflow训练自己的数据集实现CNN图像分类

CNN训练错误执行Tensorflow Python以识别狗和猫的图像

使用TensorFlow训练自己的图片并应用(CNN卷积神经网络)

使用预训练 (Tensorflow) CNN 提取特征