2017-08-01 91 views
0

我目前正在使用CNN實現超分辨率。爲了服務我的模型,我需要先將它frezze到.pb文件中,對嗎?作爲一個新手,我並不真正知道如何做到這一點。 我的模型基本上是這樣的:將CNN張量流模型凍結爲.pb文件

低分辨率輸入圖像 - >雙三次縮放(2x) - >饋送到CNN - > CNN輸出圖像具有相同的(2x)分辨率。

我的模型有3個簡單的圖層。輸出層被稱爲「輸出」。您可以在這裏找到模型:

https://github.com/pinae/Superresolution

它節省了,像這樣的進度:

  • 關卡
  • network_params.data 00000-的-00001
  • network_params.index
  • network_params.meta

我看到了這樣做的方式。

第一:按照這個教程:https://blog.metaflow.fr/tensorflow-how-to-freeze-a-model-and-serve-it-with-a-python-api-d4f3596b3adc

這似乎是(識別)多路輸出節點,而不是爲了超分辨其中只有一個輸出作出。我不知道如何修改該腳本以供我使用。

二:使用freeze_graph.py

同樣,我完全失去了關於如何使用我的模型中使用此。所有示例似乎都基於MNIST教程。

謝謝!

回答

0

不明白你的意思,但在metaflow文章中,他也使用了一個輸出節點。你可以添加幾個,取決於你如何命名你的tensor

在你的情況下,看看network.py。你需要看看output_layer

self.output = self.conv_layer("reconstruction_layer", self.layer_params[-1], 
            non_linear_mapping_layer, linear=True) 

正如你可以看到它已經命名由於conv_layer,所以在metaflow代碼,你需要做的是這樣的:

def freeze_graph(model_folder): 
    # We retrieve our checkpoint fullpath 
    checkpoint = tf.train.get_checkpoint_state(model_folder) 
    input_checkpoint = checkpoint.model_checkpoint_path 

    # We precise the file fullname of our freezed graph 
    absolute_model_folder = "/".join(input_checkpoint.split('/')[:-1]) 
    output_graph = absolute_model_folder + "/frozen_model.pb" 

    # Before exporting our graph, we need to precise what is our output node 
    # This is how TF decides what part of the Graph he has to keep and what part it can dump 
    # NOTE: this variable is plural, because you can have multiple output nodes 
    output_node_names = "reconstruction_layer" 
    ... 

注意:有時它在命名中有一個前綴,如精確性是metaflow文章Accuracy/predictions的前綴。因此,打印出存儲在檢查點中的所有變量名是有意義的。

順便說一下,由於TF 1.0,你可以保存你的模型與SavedModelBuilder。這是首選的方式,因爲它提供了跨多種語言的兼容性。唯一的注意事項是,它仍然不是一個單一的文件,但與Tensorflow服務很好。

+0

使用您的建議無效。我用一個不同的名字做了一個新的張量,現在它可以工作。它現在說:「在最終圖中將6個變量轉換爲常量操作,31個操作」。但它不會將任何內容保存到pb文件中。 –

+0

我不得不爲我們os.path。加入因爲Windows使用\而不是/ ...它現在可以工作。 –

+0

你可以標記答案已解決嗎?謝謝! –