Tensorflow:如何使用修剪后的权重保存图表

时间:2017-09-17 07:51:48

标签: python tensorflow save pruning

我已经在this work中对我的神经网络应用了迭代修剪,以减少我的网络大小约90%。我们的想法是删除对我的网络不重要的边(权重接近零)。我执行以下代码来保存模型和计算图(与train.py中的代码相同),其中sparse_w是我们希望存储的变量名的字典(即不在此字典中的所有变量都是修剪,可以扔掉):

# Save model objects to serialized format
final_saver = tf.train.Saver(sparse_w)
final_saver.save(sess, "model_ckpt_sparse_retrained")

# Save graph, this is probably where I go wrong
tf.train.write_graph(sess.graph_def, '.', "my_graph.pb", as_text=False)

当我尝试冻结我的图表进行推理时,我遇到了麻烦。或者一般来说,当我加载保存的图形+模型时。当我加载保存的图表以冻结它时:

from tensorflow.python.tools import freeze_graph
import tensorflow as tf

freeze_graph.freeze_graph(input_graph="my_graph.pb",
                          input_saver="",
                          input_binary=True,
                          input_checkpoint="model_ckpt_sparse_retrained",
                          output_node_names="y_",
                          restore_op_name="save/restore_all",
                          filename_tensor_name="save/Const:0",
                          output_graph="frozen_graph.pb",
                          clear_devices=True,
                          initializer_nodes="")

我收到错误:Attempting to use uninitialized value Variable_2。我想这是预期的,来自tensorflow试图使用我没有保存的权重。这很可能,因为我没有为密集模型得到这个错误(保存了所有权重变量)。

所以我想我需要一种方法来构建一个没有修剪权重的新图形,然后将该图形保存到pb文件中。但是我该怎么做?

0 个答案:

没有答案