روز جامعه ML 9 نوامبر است! برای به روز رسانی از TensorFlow، JAX به ما بپیوندید، و بیشتر بیشتر بدانید

با استفاده از قالب SavedModel

مشاهده در TensorFlow.org در Google Colab اجرا کنید مشاهده منبع در GitHub دانلود دفترچه یادداشت

SavedModel شامل یک برنامه TensorFlow کامل، از جمله پارامترهای آموزش دیده (یعنی tf.Variable بازدید کنندگان) و محاسبات. این کار کد مدل ساختمان اصلی برای اجرا، که باعث می شود آن را برای به اشتراک گذاری و یا استقرار با مفید نیاز ندارد TFLite ، TensorFlow.js ، TensorFlow خدمت یا TensorFlow توپی .

با استفاده از API های زیر می توانید یک مدل را در قالب SavedModel ذخیره و بارگذاری کنید:

ایجاد SavedModel از Keras

برای معرفی سریع ، این بخش یک مدل Keras از پیش آموزش دیده را صادر می کند و درخواست های طبقه بندی تصویر را با آن ارائه می دهد. بقیه راهنما جزئیات را پر کرده و راه های دیگر ایجاد SavedModels را مورد بحث قرار می دهد.

import os
import tempfile

from matplotlib import pyplot as plt
import numpy as np
import tensorflow as tf

tmpdir = tempfile.mkdtemp()
physical_devices = tf.config.list_physical_devices('GPU')
for device in physical_devices:
  tf.config.experimental.set_memory_growth(device, True)
file = tf.keras.utils.get_file(
    "grace_hopper.jpg",
    "https://storage.googleapis.com/download.tensorflow.org/example_images/grace_hopper.jpg")
img = tf.keras.preprocessing.image.load_img(file, target_size=[224, 224])
plt.imshow(img)
plt.axis('off')
x = tf.keras.preprocessing.image.img_to_array(img)
x = tf.keras.applications.mobilenet.preprocess_input(
    x[tf.newaxis,...])
Downloading data from https://storage.googleapis.com/download.tensorflow.org/example_images/grace_hopper.jpg
65536/61306 [================================] - 0s 0us/step
73728/61306 [====================================] - 0s 0us/step

png

شما می توانید از تصویر Grace Hopper به عنوان نمونه در حال اجرا و مدل طبقه بندی تصویر Keras از پیش آموزش دیده استفاده کنید زیرا استفاده از آن آسان است. مدلهای سفارشی نیز کار می کنند و بعداً به تفصیل به آنها پرداخته می شود.

labels_path = tf.keras.utils.get_file(
    'ImageNetLabels.txt',
    'https://storage.googleapis.com/download.tensorflow.org/data/ImageNetLabels.txt')
imagenet_labels = np.array(open(labels_path).read().splitlines())
Downloading data from https://storage.googleapis.com/download.tensorflow.org/data/ImageNetLabels.txt
16384/10484 [==============================================] - 0s 0us/step
24576/10484 [======================================================================] - 0s 0us/step
pretrained_model = tf.keras.applications.MobileNet()
result_before_save = pretrained_model(x)

decoded = imagenet_labels[np.argsort(result_before_save)[0,::-1][:5]+1]

print("Result before saving:\n", decoded)
Downloading data from https://storage.googleapis.com/tensorflow/keras-applications/mobilenet/mobilenet_1_0_224_tf.h5
17227776/17225924 [==============================] - 0s 0us/step
17235968/17225924 [==============================] - 0s 0us/step
Result before saving:
 ['military uniform' 'bow tie' 'suit' 'bearskin' 'pickelhaube']

بالاترین پیش بینی برای این تصویر "لباس نظامی" است.

mobilenet_save_path = os.path.join(tmpdir, "mobilenet/1/")
tf.saved_model.save(pretrained_model, mobilenet_save_path)
2021-09-22 20:37:56.476712: W tensorflow/python/util/util.cc:348] Sets are not currently considered sequences, but this may change in the future, so consider avoiding using them.
INFO:tensorflow:Assets written to: /tmp/tmpiq7_1gwc/mobilenet/1/assets

صرفه جویی مسیر را دنبال میکند استفاده شده توسط TensorFlow خدمت که در آن آخرین جزء مسیر ( 1/ اینجا) شماره نسخه برای مدل خود را است - آن را اجازه می دهد تا از ابزار مانند Tensorflow خدمت به دلیل در مورد طراوت نسبی.

شما می توانید تماس SavedModel به پایتون با بار tf.saved_model.load و ببینید که چگونه تصویر دریاسالار هاپر در طبقه بندی.

loaded = tf.saved_model.load(mobilenet_save_path)
print(list(loaded.signatures.keys()))  # ["serving_default"]
['serving_default']

امضاهای وارد شده همیشه لغت نامه ها را برمی گردانند. برای سفارشی کردن نام امضا و کلیدهای دیکشنری خروجی، و مشخص امضا در صادرات .

infer = loaded.signatures["serving_default"]
print(infer.structured_outputs)
{'predictions': TensorSpec(shape=(None, 1000), dtype=tf.float32, name='predictions')}

اجرای استنباط از SavedModel همان نتیجه را با مدل اصلی می دهد.

labeling = infer(tf.constant(x))[pretrained_model.output_names[0]]

decoded = imagenet_labels[np.argsort(labeling)[0,::-1][:5]+1]

print("Result after saving and loading:\n", decoded)
Result after saving and loading:
 ['military uniform' 'bow tie' 'suit' 'bearskin' 'pickelhaube']

اجرای SavedModel در سرویس TensorFlow

SavedModels از پایتون قابل استفاده است (بیشتر در مورد آن در زیر) ، اما محیط های تولید معمولاً از یک سرویس اختصاصی برای استنتاج بدون اجرای کد پایتون استفاده می کنند. این را می توان با استفاده از سرویس TensorFlow از SavedModel راه اندازی کرد.

مراجعه کنید TensorFlow خدمت آموزش REST برای tensorflow خدمت به عنوان مثال پایان به پایان.

فرمت SavedModel روی دیسک

SavedModel یک دایرکتوری است که دارای امضاهای سریالی و وضعیت مورد نیاز برای اجرای آنها ، شامل مقادیر متغیر و واژگان است.

ls {mobilenet_save_path}
assets  saved_model.pb  variables

saved_model.pb فروشگاه فایل برنامه واقعی TensorFlow یا مدل، و مجموعه ای از امضا به نام، هر شناسایی یک تابع است که ورودی های تانسور می پذیرد و تولید تانسور خروجی.

SavedModels ممکن است حاوی انواع متعدد از مدل (چند v1.MetaGraphDefs ، مشخص با --tag_set پرچم را به saved_model_cli )، اما این نادر است. رابط های برنامه کاربردی که ایجاد انواع متعدد از یک مدل شامل tf.Estimator.experimental_export_all_saved_models و در TensorFlow نگارش 1.x tf.saved_model.Builder .

saved_model_cli show --dir {mobilenet_save_path} --tag_set serve
The given SavedModel MetaGraphDef contains SignatureDefs with the following keys:
SignatureDef key: "__saved_model_init_op"
SignatureDef key: "serving_default"

variables پوشه شامل یک ایستگاه بازرسی استاندارد آموزش (نگاه کنید به راهنمای به پست های بازرسی آموزش ).

ls {mobilenet_save_path}/variables
variables.data-00000-of-00001  variables.index

assets دایرکتوری حاوی فایل های استفاده شده توسط نمودار TensorFlow، برای فایل های متنی به عنوان مثال با استفاده از مقداردهی اولیه جداول واژگان. در این مثال استفاده نشده است.

SavedModels ممکن است داشته assets.extra دایرکتوری برای هر فایل با نمودار TensorFlow استفاده نیست، برای اطلاعات به عنوان مثال برای مصرف کنندگان در مورد آنچه که با SavedModel. خود TensorFlow از این پوشه استفاده نمی کند.

ذخیره مدل سفارشی

tf.saved_model.save پشتیبانی از صرفه جویی tf.Module اشیاء و زیر آن، مانند tf.keras.Layer و tf.keras.Model .

نگاه بیایید به یک مثال از صرفه جویی و بازسازی یک tf.Module .

class CustomModule(tf.Module):

  def __init__(self):
    super(CustomModule, self).__init__()
    self.v = tf.Variable(1.)

  @tf.function
  def __call__(self, x):
    print('Tracing with', x)
    return x * self.v

  @tf.function(input_signature=[tf.TensorSpec([], tf.float32)])
  def mutate(self, new_v):
    self.v.assign(new_v)

module = CustomModule()

هنگامی که شما صرفه جویی tf.Module ، هر tf.Variable صفات، tf.function روش -decorated و tf.Module بازدید کنندگان پیدا شده است از طریق پیمایش بازگشتی را نجات داد. (مراجعه کنید آموزش بازرسی برای اطلاعات بیشتر در مورد این پیمایش بازگشتی.) با این حال، هر پایتون ویژگی ها، توابع، و داده ها از دست داد. به این معنی که هنگامی که یک tf.function ذخیره شده است، هیچ یک از کدهای پایتون ذخیره شده است.

اگر هیچ کد پایتون ذخیره نشده باشد ، چگونه SavedModel می داند که چگونه عملکرد را بازیابی کند؟

به طور خلاصه، tf.function کار می کند با ردیابی کد پایتون برای تولید یک ConcreteFunction (لفاف بسته بندی قابل فراخوانی در اطراف tf.Graph ). هنگام ذخیره یک tf.function ، شما واقعا صرفه جویی در tf.function کش 'ثانیه ConcreteFunctions.

برای کسب اطلاعات بیشتر در مورد رابطه بین tf.function و ConcreteFunctions، را ببینید راهنمای tf.function .

module_no_signatures_path = os.path.join(tmpdir, 'module_no_signatures')
module(tf.constant(0.))
print('Saving model...')
tf.saved_model.save(module, module_no_signatures_path)
Tracing with Tensor("x:0", shape=(), dtype=float32)
Saving model...
Tracing with Tensor("x:0", shape=(), dtype=float32)
INFO:tensorflow:Assets written to: /tmp/tmpiq7_1gwc/module_no_signatures/assets

بارگیری و استفاده از یک مدل سفارشی

هنگامی که شما یک SavedModel در پایتون، تمام بار tf.Variable صفات، tf.function -decorated روش ها، و tf.Module بازدید کنندگان در ساختار همان جسم ترمیم به عنوان اصلی ذخیره tf.Module .

imported = tf.saved_model.load(module_no_signatures_path)
assert imported(tf.constant(3.)).numpy() == 3
imported.mutate(tf.constant(2.))
assert imported(tf.constant(3.)).numpy() == 6

از آنجا که هیچ کد پایتون ذخیره شده است، فراخوانی یک tf.function با امضای ورودی جدید شکست مواجه خواهد شد:

imported(tf.constant([3.]))
ValueError: Could not find matching function to call for canonicalized inputs ((,), {}). Only existing signatures are [((TensorSpec(shape=(), dtype=tf.float32, name=u'x'),), {})].

تنظیم اولیه اولیه

اشیاء متغیر در دسترس هستند و می توانید از طریق توابع وارد شده پشتیبان گیری کنید. این برای تنظیم دقیق (یعنی آموزش مجدد) SavedModel در موارد ساده کافی است.

optimizer = tf.optimizers.SGD(0.05)

def train_step():
  with tf.GradientTape() as tape:
    loss = (10. - imported(tf.constant(2.))) ** 2
  variables = tape.watched_variables()
  grads = tape.gradient(loss, variables)
  optimizer.apply_gradients(zip(grads, variables))
  return loss
for _ in range(10):
  # "v" approaches 5, "loss" approaches 0
  print("loss={:.2f} v={:.2f}".format(train_step(), imported.v.numpy()))
loss=36.00 v=3.20
loss=12.96 v=3.92
loss=4.67 v=4.35
loss=1.68 v=4.61
loss=0.60 v=4.77
loss=0.22 v=4.86
loss=0.08 v=4.92
loss=0.03 v=4.95
loss=0.01 v=4.97
loss=0.00 v=4.98

تنظیمات کلی

SavedModel از Keras فراهم می کند اطلاعات بیشتر از یک دشت __call__ برای رسیدگی به موارد پیشرفته تر ریز تنظیم. TensorFlow Hub توصیه می کند موارد زیر را در صورت امکان در SavedModels به منظور تنظیم دقیق ارائه دهید:

  • اگر با استفاده از مدل ترک تحصیل کرده و یا روش دیگری است که در پاس رو به جلو متفاوت بین آموزش و استنتاج (مانند عادی دسته ای) از __call__ روش اختیاری، پایتون ارزش طول می کشد training= استدلال که به طور پیش فرض False است اما می توان به مجموعه ای True .
  • بعد به __call__ ویژگی، وجود دارد .variable و .trainable_variable ویژگی با لیست مربوطه متغیر. یک متغیر است که در اصل تربیت شدنی بود اما به معنای در طول ریز تنظیم به منجمد از حذف .trainable_variables .
  • به خاطر چارچوب مانند Keras که نشان دهنده regularizers وزن به عنوان صفات لایه یا زیر مدل، وجود دارد همچنین می توانید یک باشد .regularization_losses ویژگی. این لیستی از توابع با آرگومان صفر دارد که مقادیر آنها برای اضافه کردن کل ضرر در نظر گرفته شده است.

با بازگشت به مثال اولیه MobileNet ، می توانید برخی از موارد در حال عمل را مشاهده کنید:

loaded = tf.saved_model.load(mobilenet_save_path)
print("MobileNet has {} trainable variables: {}, ...".format(
          len(loaded.trainable_variables),
          ", ".join([v.name for v in loaded.trainable_variables[:5]])))
MobileNet has 83 trainable variables: conv1/kernel:0, conv1_bn/gamma:0, conv1_bn/beta:0, conv_dw_1/depthwise_kernel:0, conv_dw_1_bn/gamma:0, ...
trainable_variable_ids = {id(v) for v in loaded.trainable_variables}
non_trainable_variables = [v for v in loaded.variables
                           if id(v) not in trainable_variable_ids]
print("MobileNet also has {} non-trainable variables: {}, ...".format(
          len(non_trainable_variables),
          ", ".join([v.name for v in non_trainable_variables[:3]])))
MobileNet also has 54 non-trainable variables: conv1_bn/moving_mean:0, conv1_bn/moving_variance:0, conv_dw_1_bn/moving_mean:0, ...

تعیین امضا در حین صادرات

ابزارهای مانند TensorFlow خدمت و saved_model_cli می توانید با SavedModels تداخل می کنند. برای کمک به این ابزارها در تعیین عملکرد ConcreteFunctions ، باید امضاهای ارائه شده را مشخص کنید. tf.keras.Model بازدید کنندگان به طور خودکار مشخص خدمت امضا، اما شما باید به صراحت اعلام یک امضا خدمت برای ماژول های سفارشی ما.

به طور پیشفرض، امضا در یک سفارشی اعلام tf.Module .

assert len(imported.signatures) == 0

به اعلام یک امضا خدمت، مشخص ConcreteFunction با استفاده از signatures kwarg. در هنگام مشخص کردن امضای تک، کلید امضای آن خواهد بود 'serving_default' ، که به عنوان ثابت ذخیره شده tf.saved_model.DEFAULT_SERVING_SIGNATURE_DEF_KEY .

module_with_signature_path = os.path.join(tmpdir, 'module_with_signature')
call = module.__call__.get_concrete_function(tf.TensorSpec(None, tf.float32))
tf.saved_model.save(module, module_with_signature_path, signatures=call)
Tracing with Tensor("x:0", dtype=float32)
Tracing with Tensor("x:0", dtype=float32)
INFO:tensorflow:Assets written to: /tmp/tmpiq7_1gwc/module_with_signature/assets
imported_with_signatures = tf.saved_model.load(module_with_signature_path)
list(imported_with_signatures.signatures.keys())
['serving_default']

برای صادر کردن چندین امضا ، فرهنگ لغت کلیدهای امضا را به ConcreteFunctions ارسال کنید. هر کلید امضا مربوط به یک ConcreteFunction است.

module_multiple_signatures_path = os.path.join(tmpdir, 'module_with_multiple_signatures')
signatures = {"serving_default": call,
              "array_input": module.__call__.get_concrete_function(tf.TensorSpec([None], tf.float32))}

tf.saved_model.save(module, module_multiple_signatures_path, signatures=signatures)
Tracing with Tensor("x:0", shape=(None,), dtype=float32)
Tracing with Tensor("x:0", shape=(None,), dtype=float32)
INFO:tensorflow:Assets written to: /tmp/tmpiq7_1gwc/module_with_multiple_signatures/assets
imported_with_multiple_signatures = tf.saved_model.load(module_multiple_signatures_path)
list(imported_with_multiple_signatures.signatures.keys())
['serving_default', 'array_input']

به طور پیش فرض، نام خروجی تانسور نسبتا عمومی، مانند output_0 . برای کنترل نام خروجی، تغییر خود را tf.function برای بازگشت به یک فرهنگ لغت است که نام خروجی نقشه ها را به خروجی. نام ورودی ها از نام های تابع پایتون مشتق شده است.

class CustomModuleWithOutputName(tf.Module):
  def __init__(self):
    super(CustomModuleWithOutputName, self).__init__()
    self.v = tf.Variable(1.)

  @tf.function(input_signature=[tf.TensorSpec([], tf.float32)])
  def __call__(self, x):
    return {'custom_output_name': x * self.v}

module_output = CustomModuleWithOutputName()
call_output = module_output.__call__.get_concrete_function(tf.TensorSpec(None, tf.float32))
module_output_path = os.path.join(tmpdir, 'module_with_output_name')
tf.saved_model.save(module_output, module_output_path,
                    signatures={'serving_default': call_output})
INFO:tensorflow:Assets written to: /tmp/tmpiq7_1gwc/module_with_output_name/assets
imported_with_output_name = tf.saved_model.load(module_output_path)
imported_with_output_name.signatures['serving_default'].structured_outputs
{'custom_output_name': TensorSpec(shape=(), dtype=tf.float32, name='custom_output_name')}

یک مدل SavedModel را در C ++ بارگذاری کنید

C ++ توسط نسخه از SavedModel لودر فراهم می کند API برای بارگذاری یک SavedModel از یک مسیر، در حالی که اجازه می دهد SessionOptions و RunOptions. شما باید برچسب های مربوط به نمودار را بارگذاری کنید. نسخه بارگذاری شده SavedModel به عنوان SavedModelBundle نامیده می شود و شامل MetaGraphDef و جلسه ای است که در آن بارگیری می شود.

const string export_dir = ...
SavedModelBundle bundle;
...
LoadSavedModel(session_options, run_options, export_dir, {kSavedModelTagTrain},
               &bundle);

جزئیات رابط خط فرمان SavedModel

می توانید از رابط خط فرمان SavedModel (CLI) برای بازرسی و اجرای SavedModel استفاده کنید. به عنوان مثال، شما می توانید CLI به بازرسی مدل استفاده SignatureDef است. CLI به شما این امکان را می دهد تا به سرعت تأیید کنید که نوع و شکل Tensor ورودی با مدل مطابقت دارد. علاوه بر این ، اگر می خواهید مدل خود را آزمایش کنید ، می توانید از CLI برای بررسی سلامت با عبور ورودی های نمونه در قالب های مختلف (به عنوان مثال ، عبارات پایتون) و سپس واکشی خروجی استفاده کنید.

SavedModel CLI را نصب کنید

به طور کلی ، می توانید TensorFlow را به یکی از دو روش زیر نصب کنید:

  • با نصب باینری TensorFlow از پیش ساخته شده.
  • با ایجاد TensorFlow از کد منبع.

اگر شما TensorFlow از طریق یک TensorFlow باینری از قبل ساخته شده نصب شده است، پس از آن SavedModel CLI است در حال حاضر بر روی سیستم خود را در مسیر نصب bin/saved_model_cli .

اگر شما TensorFlow از کد منبع ساخته شده است، شما باید دستور زیر به ساخت اجرا saved_model_cli :

$ bazel build tensorflow/python/tools:saved_model_cli

مروری بر دستورات

SavedModel CLI از دو دستور زیر در SavedModel پشتیبانی می کند:

  • show ، نشان می دهد که محاسبات موجود از SavedModel.
  • run ، اجرا می شود که یک محاسبه از SavedModel.

show فرمان

SavedModel شامل یک یا چند انواع مدل (از لحاظ فنی، v1.MetaGraphDef ها)، مشخص شده توسط خود برچسب مجموعه. برای خدمت به یک مدل، شما ممکن است تعجب که چه نوع از SignatureDef در هر نوع مدل هستند، و ورودی و خروجی خود را چه هستند. show فرمان به شما اجازه محتویات SavedModel در سلسله مراتب را بررسی کند. در اینجا نحو است:

usage: saved_model_cli show [-h] --dir DIR [--all]
[--tag_set TAG_SET] [--signature_def SIGNATURE_DEF_KEY]

به عنوان مثال ، دستور زیر تمام برچسب های موجود در SavedModel را نشان می دهد:

$ saved_model_cli show --dir /tmp/saved_model_dir
The given SavedModel contains the following tag-sets:
serve
serve, gpu

دستور زیر را نشان می دهد همه در دسترس SignatureDef کلید برای یک مجموعه برچسب:

$ saved_model_cli show --dir /tmp/saved_model_dir --tag_set serve
The given SavedModel `MetaGraphDef` contains `SignatureDefs` with the
following keys:
SignatureDef key: "classify_x2_to_y3"
SignatureDef key: "classify_x_to_y"
SignatureDef key: "regress_x2_to_y3"
SignatureDef key: "regress_x_to_y"
SignatureDef key: "regress_x_to_y2"
SignatureDef key: "serving_default"

اگر از برچسب های مختلف در مجموعه ی برچسب وجود دارد، شما باید تمام دستورات مشخص، هر تگ از هم جدا شده توسط کاما. مثلا:

$ saved_model_cli show --dir /tmp/saved_model_dir --tag_set serve,gpu

برای نشان دادن تمام ورودی ها و خروجی TensorInfo برای یک خاص SignatureDef ، تصویب در SignatureDef کلید signature_def گزینه است. وقتی می خواهید مقدار کلید تنسور ، نوع و شکل تنسورهای ورودی را برای اجرای نمودار محاسبه بعداً بدانید ، بسیار مفید است. مثلا:

$ saved_model_cli show --dir \
/tmp/saved_model_dir --tag_set serve --signature_def serving_default
The given SavedModel SignatureDef contains the following input(s):
  inputs['x'] tensor_info:
      dtype: DT_FLOAT
      shape: (-1, 1)
      name: x:0
The given SavedModel SignatureDef contains the following output(s):
  outputs['y'] tensor_info:
      dtype: DT_FLOAT
      shape: (-1, 1)
      name: y:0
Method name is: tensorflow/serving/predict

برای نشان دادن تمام اطلاعات موجود در SavedModel، استفاده از --all گزینه است. مثلا:

$ saved_model_cli show --dir /tmp/saved_model_dir --all
MetaGraphDef with tag-set: 'serve' contains the following SignatureDefs:

signature_def['classify_x2_to_y3']:
  The given SavedModel SignatureDef contains the following input(s):
    inputs['inputs'] tensor_info:
        dtype: DT_FLOAT
        shape: (-1, 1)
        name: x2:0
  The given SavedModel SignatureDef contains the following output(s):
    outputs['scores'] tensor_info:
        dtype: DT_FLOAT
        shape: (-1, 1)
        name: y3:0
  Method name is: tensorflow/serving/classify

...

signature_def['serving_default']:
  The given SavedModel SignatureDef contains the following input(s):
    inputs['x'] tensor_info:
        dtype: DT_FLOAT
        shape: (-1, 1)
        name: x:0
  The given SavedModel SignatureDef contains the following output(s):
    outputs['y'] tensor_info:
        dtype: DT_FLOAT
        shape: (-1, 1)
        name: y:0
  Method name is: tensorflow/serving/predict

run دستور

فراخوان run دستور برای اجرای یک محاسبه نمودار، عبور ورودی و نمایش (و اختیاری صرفه جویی) خروجی. در اینجا نحو است:

usage: saved_model_cli run [-h] --dir DIR --tag_set TAG_SET --signature_def
                           SIGNATURE_DEF_KEY [--inputs INPUTS]
                           [--input_exprs INPUT_EXPRS]
                           [--input_examples INPUT_EXAMPLES] [--outdir OUTDIR]
                           [--overwrite] [--tf_debug]

run دستور فراهم می کند در بر داشت زیر سه راه به تصویب ورودی به مدل:

  • --inputs گزینه شما را قادر می سازد به تصویب ndarray نامپای در فایل.
  • --input_exprs گزینه شما را قادر به عبور عبارت پایتون.
  • --input_examples گزینه شما را قادر به عبور tf.train.Example .

--inputs

به تصویب داده های ورودی در فایل ها، مشخص --inputs گزینه، که طول می کشد با فرمت کلی زیر است:

--inputs <INPUTS>

که در آن ورودی است هر یک از فرمت های زیر:

  • <input_key>=<filename>
  • <input_key>=<filename>[<variable_name>]

شما نمیتوانید ورودی های متعدد منتقل می کند. اگر شما منتقل ورودی های متعدد، استفاده از نقطه ویرگول برای جدا کردن هر یک از ورودی.

saved_model_cli استفاده numpy.load برای بارگذاری فایل برنامه است. نام فایل ممکن است در هر یک از فرمت های زیر است:

  • .npy
  • .npz
  • قالب ترشی

.npy فایل همیشه شامل یک ndarray نامپای. بنابراین، در هنگام بارگذاری از .npy فایل، محتوای خواهد شد به طور مستقیم به تانسور ورودی مشخص می شود. اگر شما یک variable_name مشخص با .npy فایل، variable_name نادیده گرفته می شود و یک هشدار صادر خواهد شد.

هنگامی که بارگذاری از .npz فایل (فایل زیپ)، شما ممکن است به صورت اختیاری یک variable_name مشخص برای شناسایی متغیر در فایل زیپ برای کلید تانسور ورودی بارگذاری. اگر شما یک variable_name مشخص نیست، SavedModel CLI را بررسی خواهد کرد که تنها یک فایل در فایل زیپ گنجانده و بار آن را برای کلید تانسور ورودی مشخص شده است.

هنگامی که بارگذاری از یک فایل ترشی، اگر هیچ variable_name در براکت مشخص شده، هر آنچه که در داخل فایل ترشی خواهد شد به کلید تانسور ورودی مشخص منتقل می شود. غیر این صورت، SavedModel CLI فرض خواهد یک فرهنگ لغت در فایل ذخیره می شود و ترشی ارزش مربوط به variable_name استفاده خواهد شد.

--input_exprs

به تصویب ورودی از طریق عبارت پایتون، مشخص --input_exprs گزینه است. این می تواند برای زمانی که شما فایل های داده دروغ گفتن در اطراف ندارد مفید است، اما هنوز هم به سلامت عقل می خواهید بررسی مدل با برخی از ورودی های ساده که مطابقت dtype و شکل مدل SignatureDef است. مثلا:

`<input_key>=[[1],[2],[3]]`

علاوه بر عبارات پایتون ، ممکن است توابع numpy را نیز ارسال کنید. مثلا:

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

(توجه داشته باشید که numpy ماژول حال حاضر در دسترس به شما به عنوان np .)

--input_examples

به تصویب tf.train.Example به عنوان ورودی، مشخص --input_examples گزینه است. برای هر کلید ورودی، طول می کشد یک لیست از فرهنگ لغت، که در آن هر فرهنگ لغت یک نمونه از است tf.train.Example . کلیدهای دیکشنری ویژگی ها و مقادیر لیست ارزش ها برای هر ویژگی هستند. مثلا:

`<input_key>=[{"age":[22,24],"education":["BS","MS"]}]`

خروجی را ذخیره کنید

به طور پیش فرض ، SavedModel CLI خروجی را به stdout می نویسد. اگر یک دایرکتوری به تصویب --outdir گزینه، خروجی خواهد شد به عنوان ذخیره .npy فایل ها پس از کلید خروجی تانسور تحت دایرکتوری داده شده نام برد.

استفاده از --overwrite به بازنویسی فایل های خروجی موجود است.