我已经在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
文件中。但是我该怎么做?