این صفحه به‌وسیله ‏Cloud Translation API‏ ترجمه شده است.
Switch to English

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

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

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

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

ایجاد یک مدل SavedM از 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.experimental.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

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

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
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)
WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow/python/training/tracking/tracking.py:111: Model.state_updates (from tensorflow.python.keras.engine.training) is deprecated and will be removed in a future version.
Instructions for updating:
This property should not be used in TensorFlow 2.0, as updates are applied automatically.
WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow/python/training/tracking/tracking.py:111: Layer.updates (from tensorflow.python.keras.engine.base_layer) is deprecated and will be removed in a future version.
Instructions for updating:
This property should not be used in TensorFlow 2.0, as updates are applied automatically.
INFO:tensorflow:Assets written to: /tmp/tmps13igs50/mobilenet/1/assets

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

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

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']

اجرای یک مدل SavedM در سرویس TensorFlow

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

برای یک مثال در مورد سرویس دهی جریان تنسور پایان به انتها ، به آموزش TESTORFlow Serving REST مراجعه کنید.

قالب SavedModel بر روی دیسک

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

ls {mobilenet_save_path}
assets  saved_model.pb  variables

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

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

saved_model_cli show --dir {mobilenet_save_path} --tag_set serve
2020-12-10 02:22:25.726807: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcudart.so.10.1
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 بازدید کنندگان پیدا شده است از طریق پیمایش بازگشتی را نجات داد. (برای اطلاعات بیشتر در مورد این عبور بازگشتی به آموزش Checkpoint مراجعه کنید.) با این وجود ، ویژگی ها ، توابع و داده های Python از بین می روند. این به این معنی است که وقتی یک tf.function . ذخیره می شود ، هیچ کد پایتون ذخیره نمی شود.

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

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

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

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/tmps13igs50/module_no_signatures/assets

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

هنگامی که یک SavedModel را در پایتون بارگیری می کنید ، همه ویژگی های tf.Variable ، روش های تزئین شده با tf.function tf.fod و tf.Module در همان ساختار شی object مانند 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'),), {})].

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

اشیا متغیر در دسترس هستند و می توانید از طریق توابع وارد شده محصول خود را تهیه کنید. این برای تنظیم دقیق (یعنی بازآموزی) یک مدل SavedMel در موارد ساده کافی است.

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

تنظیم دقیق کلی

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

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

مشخص کردن امضاها هنگام صادرات

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

به طور پیش فرض ، هیچ امضایی در tf.Module سفارشی اعلام 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/tmps13igs50/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/tmps13igs50/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 خروجی کاملاً عمومی هستند ، مانند output_0 . برای کنترل نام خروجی ها ، tf.function خود را اصلاح کنید تا یک فرهنگ لغت که نام خروجی ها را به خروجی ها نشان می دهد ، برگرداند. نام ورودی ها از نام arg تابع Python گرفته شده اند.

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/tmps13igs50/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')}

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

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

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

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

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

SavedModel CLI را نصب کنید

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

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

اگر TensorFlow را از طریق باینری TensorFlow که از قبل ساخته شده نصب کرده اید ، SavedModel CLI از قبل روی سیستم شما با نام pathname 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 s) است که توسط مجموعه برچسب های آنها مشخص شده است. برای ارائه یک مدل ، ممکن است از خود بپرسید که 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 to 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 شما را قادر می سازد که تقسیم numpy را در پرونده ها منتقل کنید.
  • گزینه --input_exprs شما را قادر می سازد عبارات Python را منتقل کنید.
  • گزینه --input_examples شما را قادر می سازد از tf.train.Example عبور tf.train.Example .

--inputs

برای عبور داده های ورودی در پرونده ها ، گزینه --inputs را مشخص کنید ، که به شکل کلی زیر در می آید:

--inputs <INPUTS>

که INPUTS یکی از قالبهای زیر است:

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

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

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

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

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

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

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

--input_exprs

برای عبور ورودی ها از عبارات Python ، گزینه --input_exprs را مشخص کنید. این مورد می تواند برای مواردی مفید باشد که فایلهای داده ای در آن جا نیستید ، اما همچنان می خواهید مدل را با چند ورودی ساده متناسب با نوع و شکل SignatureDef s مدل بررسی کنید. مثلا:

`<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 استفاده کنید.