Тензор потока: как сохранить график с сокращенными весами
Я применил итеративное сокращение к своей нейронной сети, как в этой работе, чтобы уменьшить размер моей сети примерно на 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
, Я предполагаю, что это ожидаемо и происходит от tenorflow, пытающегося использовать веса, которые я не сохранил. Это вероятно, потому что я не получаю эту ошибку для плотной модели (со всеми сохраненными весовыми переменными).
Итак, я полагаю, мне нужен способ построить новый граф без сокращенных весов, а затем сохранить этот граф в pb
файл. Но как мне это сделать?