我已经对我的神经网络应用了迭代修剪,就像在这项工作中一样,将我的网络大小减少了大约 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
文件中。但是我该怎么做呢?