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 的sess 或 graph 制作这种格式。 我尝试腌制 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深度学习的人脸识别
CNN训练错误执行Tensorflow Python以识别狗和猫的图像