保存模型

    一个SavedModel包含一个完整的TensorFlow程序,包括权重和计算。它不需要运行原始的模型构建代码,这使得它对于共享或部署(使用TFLite、TensorFlow.js、TensorFlow Serving或TensorFlow Hub)非常有用。

    如果您有R中模型的代码,并且只想将权重加载到其中,请参阅训练检查点指南。

    创建一个SavedModel从Keras

    为了快速介绍,本节导出一个预先训练好的Keras模型,并用它来处理图像分类请求。本指南的其余部分将补充细节并讨论其他创建方法SavedModel年代。

    我们将使用格蕾丝·霍珀(Grace Hopper)的一张图像作为示例,并使用Keras预先训练的图像分类模型,因为它很容易使用。自定义模型也可以,稍后将详细介绍。

    x < -image_load(文件,target_size =列表224224))% > %image_to_array()% > %mobilenet_preprocess_input昏暗的(x) < - - - - - -c1昏暗的(x))
    特遣部队saved_model保存(pretrained_model“/ tmp / mobilenet / 1 /”

    保存路径遵循TensorFlow Serving使用的约定,其中最后一个路径组件(1/这里)是你的模型的版本号——它允许TensorFlow Serving这样的工具推断相对新鲜度。

    SavedModel有命名函数称为签名。Keras模型在serving_default签名键下导出它们的正向传递。的SavedModel命令行接口(见下面)用于检查SavedModel在磁盘上:

    我们可以加载SavedModel使用tf.saved_model返回到Python。负载and see how Admiral Hopper’s image is classified.

    导入的签名总是返回字典。

    运行推理从SavedModel给出了与原始模型相同的结果。

    SavedModel磁盘上的格式

    一个SavedModel是包含序列化签名和运行它们所需的状态(包括变量值和词汇表)的目录。

    saved_model.pb文件存储了实际的TensorFlow程序或模型,以及一组命名签名,每个签名标识一个接受张量输入并产生张量输出的函数。

    SavedModelS可能包含模型的多个变体(多个v1 MetaGraphDefs美元,以saved_model_cli的-tag_set标志标识),但这种情况很罕见。

    变量目录包含一个标准训练检查点(请参阅训练检查点指南)。

    资产目录包含TensorFlow图使用的文件,例如用于初始化词汇表的文本文件。在本例中不使用它。

    SavedModelS可能有一个额外的美元资产目录用于TensorFlow图中未使用的任何文件,例如为使用者提供的关于如何处理的信息SavedModel.TensorFlow本身并不使用这个目录。

    加载一个SavedModel在c++中

    的c++版本SavedModelloader提供了一个API来加载SavedModel从一个路径,同时允许SessionOptions和runnoptions。您必须指定与要加载的图相关联的标记。的加载版本SavedModel被称为SavedModelBundle,并包含MetaGraphDef和在其中加载它的会话。

    的细节SavedModel命令行接口

    您可以使用SavedModel命令行接口(Command Line Interface),用于检查和执行aSavedModel.例如,您可以使用CLI来检查模型的SignatureDefs。CLI允许您快速确认输入张量的dtype和形状与模型匹配。此外,如果希望测试模型,可以使用CLI进行完整性检查,方法是传入各种格式的样例输入(例如,Python表达式),然后获取输出。

    安装SavedModelCLI

    一般来说,你可以通过以下两种方式安装TensorFlow:

    • 通过安装预构建的TensorFlow二进制文件。
    • 通过从源代码构建TensorFlow。

    如果你通过预构建的TensorFlow二进制文件安装TensorFlow,那么SavedModelCLI已经安装在您的系统的路径名上bin / saved_model_cli

    如果你从源代码构建TensorFlow,你必须运行以下附加命令来构建saved_model_cli:

    概述的命令

    SavedModelCLI在卡塔尔世界杯欧洲预选赛赛程表a上支持以下两个命令SavedModel

    • 显示,它显示了可用的计算SavedModel
    • 运行,它运行一个从SavedModel

    显示命令

    一个SavedModel包含一个或多个模型变量(从技术上讲,v1。MetaGraphDefS),由它们的标记集识别。为模特服务,你可能想知道是什么样的SignatureDefs在每个模型变量中,它们的输入和输出是什么。的内容SavedModel在分层秩序。这里的语法:

    控件中所有可用的标记集SavedModel

    下面的命令显示标签集所有可用的SignatureDef键:

    如果标记集中有多个标记,则必须指定所有标记,每个标记用逗号分隔。例如:

    显示所有的输入和输出TensorInfo为一个特定的SignatureDef,把SignatureDefsignature_def选项的键。当你想知道张量键值,dtype和输入张量的形状,以便以后执行计算图时,这是非常有用的。例如:

    以显示所有可用的信息SavedModel,使用-all选项。例如:

    运行命令

    调用run命令来运行图形计算,传递输入,然后显示(可选地保存)输出。这里的语法:

    run命令提供了以下三种向模型传递输入的方法:

    • ——输入选项使您能够传递numpyndarray在文件中。
    • ——input_exprsoption允许您传递Python表达式。
    • ——input_examples选项使您能够通过特遣部队训练美元的例子
    ——输入

    要在文件中传递输入数据,请指定——输入选项,该选项采用以下通用格式:

    ——输入<输入>

    其中,INPUTS为以下格式之一:

    • < input_key > = <文件名>
    • < input_key > = <文件名> (< variable_name >)

    您可以传递多个输入。如果要传递多个输入,则使用分号分隔每个输入。

    saved_model_cli使用numpy。负载to load the filename. The filename may be in any of the following formats:

    • .npy
    • .npz
    • pickle格式

    一个.npy文件总是包含一个numpyndarray.因此,当从.npy文件中,内容将直接赋值给指定的输入张量。如果你用它指定一个variable_name.npy文件,variable_name将被忽略,并发出警告。

    当从.npz(zip)文件,你可以选择指定一个variable_name来识别zip文件中的变量来加载输入张量键。如果不指定variable_name,则SavedModelCLI将检查zip文件中只包含一个文件,并为指定的输入张量键加载它。

    当从pickle文件加载时,如果方括号中没有指定variable_name,无论pickle文件中是什么,都将传递给指定的输入张量键。否则,SavedModel命令行假定pickle文件中存储了一个字典,而对应的值是variable_name就会被使用。

    ——input_exprs

    要通过Python表达式传递输入,请指定——input_exprs选择。当您没有数据文件,但仍然希望使用一些与模型的dtype和形状匹配的简单输入对模型进行完整性检查时,这可能很有用SignatureDefs.例如:

    < input_key > =[[1]、[2]、[3]]

    除了Python表达式之外,还可以传递numpy函数。例如:

    < input_key > = np.ones((32岁,32岁,3))

    (注意,numpy模块已经可以作为np.)

    ——input_examples

    通过特遣部队训练美元的例子作为输入,指定——input_examples选择。对于每个输入键,它接受一个字典列表,其中每个字典都是的实例特遣部队训练美元的例子.字典键是特性,值是每个特性的值列表。例如:

    < input_key > =[{“年龄”:(22日、24日),“教育”(“废话”,“女士”)})

    保存输出

    默认情况下,SavedModelCLI将输出写入stdout。如果一个目录被传递到——outdir选项,输出将被保存为.npy在给定目录下以输出张量键命名的文件。

    使用——覆盖覆盖现有的输出文件。