Obecnie próbuję wyeksportować wyszkolony model TensorFlow jako plik ProtoBuf, aby użyć go z API TensorFlow C++ na Androida. Dlatego używam skryptu freeze_graph.py
.TensorFlow freeze_graph.py: Nazwa 'save/Const: 0' odnosi się do Tensora, który nie istnieje
I eksportowane mój model używając tf.train.write_graph
:
tf.train.write_graph(graph_def, FLAGS.save_path, out_name, as_text=True)
i używam checkpoint zapisywane tf.train.Saver
.
Przywołuję freeze_graph.py
zgodnie z opisem w górnej części skryptu. Po kompilacji, biegnę
bazel-bin/tensorflow/python/tools/freeze_graph \
--input_graph=<path_to_protobuf_file> \
--input_checkpoint=<model_name>.ckpt-10000 \
--output_graph=<output_protobuf_file_path> \
--output_node_names=dropout/mul_1
To daje mi się następujący komunikat o błędzie:
TypeError: Cannot interpret feed_dict key as Tensor: The name 'save/Const:0' refers to a Tensor which does not exist. The operation, 'save/Const', does not exist in the graph.
Jak stwierdza błędów nie mam tensora save/Const:0
w moim eksportowanego modelu. Jednak kod freeze_graph.py
mówi, że można określić tę nazwę tensora przez flagę filename_tensor_name
. Niestety nie mogę znaleźć żadnych informacji na temat tego, czym powinien być ten tensor i jak go poprawnie ustawić dla mojego modelu.
Czy ktoś może mi powiedzieć, jak wytworzyć tensor save/Const:0
w wyeksportowanym modelu ProtoBuf lub jak poprawnie ustawić flagę filename_tensor_name
?
+1 Miał ten sam problem, zmienił kolejność linii w dokładnie taki sam sposób, jak napisałeś, rozwiązał problem również dla mnie. Chciałbym też trochę wyjaśnienia :) – kazarey