簡體   English   中英

將CNN張量流模型凍結到.pb文件中

[英]Freezing a CNN tensorflow model into a .pb file

我目前正在嘗試使用CNN進行超分辨率。 要為我的模型提供服務,我需要先將其保存為.pb文件,對嗎? 作為一個新手,我真的不知道該怎么做。 我的模型基本上是這樣的:

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

我的模型有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教程。

謝謝!

不明白您的意思,但是在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 ,它已經是名稱,因此在元流代碼中,您需要執行以下操作:

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"
    ...

注意:有時它在命名中帶有前綴,例如Accuracy是元流文章Accuracy/predictions的前綴。 因此,打印出您存儲在檢查點中的所有變量名稱是有意義的。

順便說一句,從TF 1.0開始,您可以使用SavedModelBuilder保存模型。 這是首選方法,因為它提供了跨多種語言的兼容性。 唯一需要注意的是,它仍然不是一個文件,但可以與Tensorflow Serving一起很好地工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM