我的问题与this one here有关持久性图表的问题有关:我想知道是否只能导出图表的某些部分,例如使用TensorFlow 0.12或更新版本的前缀为给定范围的子图。
我目前正在使用tf.train.import_meta_graph()
,graph_util.convert_variables_to_constants()
和tf.train.write_graph()
的组合将图表导出(“冻结”)到协议缓冲区文件中,然后我可以使用{ {1}}。在导出期间,我可以指定哪些节点被视为图形的必需输出,因此不会丢弃任何上游节点,而在导入期间,我可以使用{{1}将图形的某些部分重新连接到其他操作}。
这一切都运行良好,但它缺少不必要的输入的概念,问题在于这样做,tf.import_graph_def()
上游的整个也写入文件,即所有输入和预处理相关。
目前,导出如下所示:
input_map
虽然导入如下所示:
output_nodes
有没有办法在导出期间或之前过滤和/或删除我不需要的部分?要清楚,我知道我可以在加载后忽略它们,但我不会将它们导出为开头。在某些时候使用集合会有帮助吗?
答案 0 :(得分:1)
我认为内置的图形保存工具需要重新设计。
我找到的最佳解决方案是创建一个您想要保存的变量列表,然后在会话期间保存它们。之后,您可以自由重新加载权重并根据需要更改图表。
parameters = []
parameters += [wieghts, biases]
...
def load_weights(self, weight_file, sess):
weights = np.load(weight_file)
keys = sorted(weights.keys())
for i, k in enumerate(keys):
print i, k, np.shape(weights[k])
sess.run(self.parameters[i].assign(weights[k]))
想法归功于Davi Frossard here