Bu sayfa, Cloud Translation API ile çevrilmiştir.
Switch to English

SavedModel biçimini kullanma

TensorFlow.org'da görüntüleyin Google Colab'de çalıştırın Kaynağı GitHub'da görüntüleyin Defteri indirin

SavedModel, ağırlıklar ve hesaplama da dahil olmak üzere eksiksiz bir TensorFlow programı içerir. Orijinal model oluşturma kodunun çalıştırılmasını gerektirmez, bu da onu paylaşım veya dağıtım için yararlı kılar ( TFLite , TensorFlow.js , TensorFlow Sunumu veya TensorFlow Hub ile ).

Bu belge, düşük seviyeli tf.saved_model nasıl kullanılacağına ilişkin bazı ayrıntıları ele almaktadır:

Keras'tan SavedModel Oluşturma

Hızlı bir giriş için, bu bölüm önceden eğitilmiş bir Keras modelini dışa aktarır ve onunla görüntü sınıflandırma taleplerini sunar. Kılavuzun geri kalanı ayrıntıları dolduracak ve SavedModels oluşturmanın diğer yollarını tartışacaktır.

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

Çalışan bir örnek olarak Grace Hopper'ın bir görüntüsünü ve kullanımı kolay olduğu için Keras önceden eğitilmiş bir görüntü sınıflandırma modelini kullanacaksınız. Özel modeller de işe yarar ve daha sonra ayrıntılı olarak ele alınacaktır.

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 [==============================] - 1s 0us/step
Result before saving:
 ['military uniform' 'bow tie' 'suit' 'bearskin' 'pickelhaube']

Bu imaj için en önemli tahmin "askeri üniforma".

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/tmpqrbxtm18/mobilenet/1/assets

Kaydetme yolu, TensorFlow Serving tarafından kullanılan ve son yol bileşeninin ( 1/ burada) modeliniz için bir sürüm numarası olduğu bir kuralı takip eder - Tensorflow Serving gibi araçların göreceli tazelik hakkında akıl yürütmesine olanak tanır.

SavedModel'i tf.saved_model.load ile Python'a geri tf.saved_model.load ve Amiral Hopper'ın görüntüsünün nasıl sınıflandırıldığını görebilirsiniz.

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

İçe aktarılan imzalar her zaman sözlük döndürür. İmza adlarını ve çıktı sözlük anahtarlarını özelleştirmek için, bkz. Dışa aktarma sırasında imzaları belirtme .

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

SavedModel'den çıkarımı çalıştırmak, orijinal modelle aynı sonucu verir.

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

TensorFlow Sunumunda SavedModel Çalıştırma

SavedModels, Python'dan kullanılabilir (daha fazlası aşağıdadır), ancak üretim ortamları genellikle Python kodunu çalıştırmadan çıkarım için özel bir hizmet kullanır. Bu, TensorFlow Sunumu kullanılarak bir SavedModel'den kolayca kurulabilir.

Uçtan uca tensorflow sunum örneği için TensorFlow Sunum REST eğiticisine bakın.

Diskteki SavedModel biçimi

SavedModel, serileştirilmiş imzaları ve bunları çalıştırmak için gereken durumu, değişken değerleri ve sözcükleri içeren bir dizindir.

ls {mobilenet_save_path}
assets  saved_model.pb  variables

saved_model.pb dosyası, gerçek TensorFlow programını veya modelini ve her biri tensör girdilerini kabul eden ve tensör çıktıları üreten bir işlevi tanımlayan bir dizi adlandırılmış imzayı depolar.

SavedModels (çoklu model birden çok varyasyonu içerebilir v1.MetaGraphDefs ile özdeşleşmiş, --tag_set için bayrak saved_model_cli ), ancak bu nadirdir. Bir modelin birden çok varyantını oluşturan API'ler arasında tf.Estimator.experimental_export_all_saved_models ve TensorFlow 1.x tf.saved_model.Builder .

saved_model_cli show --dir {mobilenet_save_path} --tag_set serve
2020-10-13 01:23:41.728141: 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 dizini standart bir eğitim kontrol noktası içerir (eğitim kontrol noktaları kılavuzuna bakın).

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

assets dizini, kelime tablolarını başlatmak için kullanılan metin dosyaları gibi TensorFlow grafiği tarafından kullanılan dosyaları içerir. Bu örnekte kullanılmamaktadır.

SavedModels, TensorFlow grafiği tarafından kullanılmayan dosyalar için bir assets.extra dizinine sahip olabilir, örneğin tüketiciler için SavedModel ile ne yapılacağı hakkında bilgiler. TensorFlow'un kendisi bu dizini kullanmaz.

Özel bir modeli kaydetme

tf.saved_model.save , tf.Module nesnelerini ve tf.keras.Layer ve tf.keras.Model gibi alt sınıflarını kaydetmeyi destekler.

Bir tf.Module kaydetme ve geri yükleme 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()

Bir tf.Module , tüm tf.Variable öznitelikleri, tf.function -decorated yöntemler ve özyinelemeli geçiş yoluyla bulunan tf.Module ler kaydedilir. (Bu yinelemeli geçiş hakkında daha fazla bilgi için Kontrol Noktası eğitimine bakın.) Ancak, herhangi bir Python özelliği, işlevi ve veri kaybolur. Bu, bir tf.function fonksiyonu kaydedildiğinde Python kodunun kaydedilmediği anlamına gelir.

Python kodu kaydedilmediyse, SavedModel işlevi nasıl geri yükleyeceğini nasıl biliyor?

Kısaca, tf.function , bir ConcreteFunction ( tf.Graph çevresinde çağrılabilir bir sarmalayıcı) oluşturmak için Python kodunu izleyerek çalışır. Bir tf.function kaydederken, gerçekten tf.function ConcreteFunctions önbelleğini tf.function .

tf.function ve ConcreteFunctions arasındaki ilişki hakkında daha fazla bilgi edinmek için tf.function kılavuzuna bakın .

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

Özel bir model yükleme ve kullanma

Python'da bir SavedModel yüklediğinizde, tüm tf.Variable öznitelikleri, tf.function -decorated yöntemleri ve tf.Module s, orijinal kaydedilmiş tf.Module aynı nesne yapısında geri yüklenir.

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

Python kodu kaydedilmediğinden, yeni bir giriş imzasıyla tf.function çağırmak başarısız olur:

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'),), {})].

Temel ince ayar

Değişken nesneler mevcuttur ve içe aktarılan işlevler aracılığıyla geri dönüş yapabilirsiniz. Bu, basit durumlarda bir SavedModel'in ince ayarını yapmak (yani yeniden eğitmek) için yeterlidir.

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

Genel ince ayar

Keras'tan bir SavedModel, daha gelişmiş ince ayar durumlarını ele __call__ için düz bir __call__ daha fazla ayrıntı sağlar. TensorFlow Hub, ince ayar amacıyla paylaşılan SavedModels'te, varsa aşağıdakilerin sağlanmasını önerir:

  • Model, bırakma veya ileri geçişin eğitim ve çıkarım arasında farklılık gösterdiği başka bir teknik (toplu normalleştirme gibi) kullanıyorsa, __call__ yöntemi varsayılan olarak False ancak True olarak ayarlanabilen isteğe bağlı, Python değerli bir training= bağımsız değişken alır.
  • Yanındaki __call__ özniteliği vardır .variable ve .trainable_variable değişkenlerin gelen listeleri ile nitelikler. Başlangıçta eğitilebilir olan ancak ince ayar sırasında dondurulması amaçlanan bir değişken .trainable_variables .
  • Ağırlık düzenleyicilerini katmanların veya alt modellerin öznitelikleri olarak temsil eden .regularization_losses gibi çerçeveler uğruna, bir .regularization_losses özniteliği de olabilir. Değerleri toplam kayba ek olarak verilen sıfır bağımsız değişkenli işlevlerin bir listesini tutar.

İlk MobileNet örneğine geri dönersek, bunların bazılarının eylemde olduğunu görebilirsiniz:

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

Dışa aktarma sırasında imzaları belirleme

TensorFlow Sunumu ve saved_model_cli gibi araçlar saved_model_cli ile etkileşim kurabilir. Bu araçların hangi ConcreteFunctions'ın kullanılacağını belirlemesine yardımcı olmak için sunum imzaları belirtmeniz gerekir. tf.keras.Model , sunum imzalarını otomatik olarak belirtir, ancak özel modüllerimiz için açık bir şekilde bir sunum imzası beyan etmeniz gerekir.

Varsayılan olarak, özel bir tf.Module hiçbir imza bildirilmez.

assert len(imported.signatures) == 0

Bir sunum imzası bildirmek için, kwarg signatures kullanarak bir ConcreteFunction belirtin. Tek bir imza 'serving_default' , imza anahtarı 'serving_default' sabiti olarak kaydedilen '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/tmpqrbxtm18/module_with_signature/assets

imported_with_signatures = tf.saved_model.load(module_with_signature_path)
list(imported_with_signatures.signatures.keys())
['serving_default']

Birden çok imzayı dışa aktarmak için, ConcreteFunctions'a bir imza anahtarları sözlüğü iletin. Her imza anahtarı bir ConcreteFunction'a karşılık gelir.

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

Varsayılan olarak, çıktı tensör adları, output_0 gibi oldukça geneldir. Çıktıların adlarını kontrol etmek için, tf.function çıktı adlarını çıktılara eşleyen bir sözlük tf.function şekilde değiştirin. Girişlerin isimleri Python fonksiyonu arg isimlerinden türetilir.

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

C ++ 'da SavedModel Yükleme

SavedModel yükleyicinin C ++ sürümü, SessionOptions ve RunOptions'a izin verirken, bir yoldan SavedModel yüklemek için bir API sağlar. Yüklenecek grafikle ilişkili etiketleri belirtmelisiniz. SavedModel'in yüklenen sürümü SavedModelBundle olarak adlandırılır ve MetaGraphDef'i ve içinde yüklendiği oturumu içerir.

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

SavedModel komut satırı arayüzünün ayrıntıları

SavedModel'i incelemek ve yürütmek için SavedModel Komut Satırı Arayüzünü (CLI) kullanabilirsiniz. Örneğin, modelin SignatureDef öğelerini incelemek için CLI kullanabilirsiniz. CLI, giriş Tensör tipi ve şeklinin modelle eşleştiğini hızlı bir şekilde onaylamanızı sağlar. Dahası, modelinizi test etmek istiyorsanız, çeşitli formatlarda (örneğin, Python ifadeleri) örnek girişleri geçirip ardından çıktıyı getirerek bir akıl sağlığı kontrolü yapmak için CLI'yi kullanabilirsiniz.

SavedModel CLI'yi yükleyin

Genel olarak, TensorFlow'u aşağıdaki iki yoldan biriyle kurabilirsiniz:

  • Önceden oluşturulmuş bir TensorFlow ikili dosyası kurarak.
  • Kaynak kodundan TensorFlow oluşturarak.

TensorFlow'u önceden oluşturulmuş bir TensorFlow ikili programıyla kurduysanız, SavedModel CLI, bin/saved_model_cli yol bin/saved_model_cli sisteminize zaten yüklenmiştir.

TensorFlow'u kaynak koddan oluşturduysanız, saved_model_cli oluşturmak için aşağıdaki ek komutu çalıştırmanız gerekir:

$ bazel build tensorflow/python/tools:saved_model_cli

Komutlara genel bakış

SavedModel CLI, SavedModel'de aşağıdaki iki komutu destekler:

  • show bir SavedModel dan olan Şekil hesaplamaları mevcuttur.
  • SavedModel'den bir hesaplama run .

show komutu

SavedModel, etiket kümeleriyle tanımlanan bir veya daha fazla model varyantı (teknik olarak v1.MetaGraphDef s) içerir. Bir modeli sunmak için, her model varyantında ne tür SignatureDef olduğunu ve bunların girdilerinin ve çıktılarının neler olduğunu merak edebilirsiniz. show komutu, SavedModel'in içeriğini hiyerarşik sırada incelemenizi sağlar. Sözdizimi şöyledir:

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

Örneğin, aşağıdaki komut SavedModel'deki tüm kullanılabilir etiket kümelerini gösterir:

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

Aşağıdaki komut, bir etiket kümesi için mevcut tüm SignatureDef anahtarlarını gösterir:

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

Etiket kümesinde birden fazla etiket varsa, her bir etiket virgülle ayrılmış olarak tüm etiketleri belirtmelisiniz. Örneğin:

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

Belirli bir SignatureDef için tüm girişleri ve çıkışları TensorInfo göstermek için, SignatureDef anahtarını signature_def seçeneğine geçirin. Bu, hesaplama grafiğini daha sonra yürütmek için giriş tensörlerinin tensör anahtar değerini, dtipini ve şeklini bilmek istediğinizde çok kullanışlıdır. Örneğin:

$ 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'de mevcut tüm bilgileri göstermek için --all seçeneğini kullanın. Örneğin:

$ 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

komut run

Bir grafik hesaplaması çalıştırmak, girişleri geçirmek ve ardından çıktıları görüntülemek (ve isteğe bağlı olarak kaydetmek) için run komutunu çağırın. Sözdizimi şöyledir:

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 komutu, girdileri modele geçirmek için aşağıdaki üç yolu sağlar:

  • --inputs seçeneği, dosyalarda numpy ndarray geçirmenizi sağlar.
  • --input_exprs seçeneği Python ifadelerini --input_exprs sağlar.
  • --input_examples seçenek geçmesine olanak tf.train.Example .

--inputs

Dosyalardaki giriş verilerini iletmek için, aşağıdaki genel biçimi alan --inputs seçeneğini belirtin:

--inputs <INPUTS>

GİRİŞLER aşağıdaki biçimlerden biridir:

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

Birden fazla GİRİŞ geçirebilirsiniz. Birden fazla girdi geçirirseniz, GİRİŞLERİN her birini ayırmak için bir noktalı virgül kullanın.

saved_model_cli , dosya numpy.load yüklemek için saved_model_cli kullanır. Dosya adı aşağıdaki biçimlerden herhangi birinde olabilir:

  • .npy
  • .npz
  • turşu biçimi

Bir .npy dosyası her zaman bir numpy ndarray içerir. Bu nedenle, bir .npy dosyasından yüklerken, içerik doğrudan belirtilen giriş tensörüne atanacaktır. Bu .npy dosyasıyla bir değişken_adı belirtirseniz, değişken_adı yok sayılır ve bir uyarı verilir.

Bir .npz (zip) dosyasından yüklerken, isteğe bağlı olarak, girdi tensör anahtarı için yüklenecek zip dosyasındaki değişkeni tanımlamak için bir değişken_adı belirtebilirsiniz. Bir değişken_adı belirtmezseniz, SavedModel CLI, zip dosyasına yalnızca bir dosyanın dahil olup olmadığını kontrol eder ve belirtilen giriş tensör anahtarı için onu yükler.

Bir turşu dosyasından yükleme yapılırken, köşeli parantez içinde variable_name belirtilmezse, turşu dosyasının içindeki her ne olursa olsun, belirtilen giriş tensör anahtarına aktarılacaktır. Aksi takdirde, SavedModel CLI, bir sözlüğün turşu dosyasında saklandığını varsayar ve değişken_ismi ile ilgili değer kullanılır.

--input_exprs

Girdileri Python ifadelerinden geçirmek için --input_exprs seçeneğini belirtin. Bu, etrafta veri dosyalarınız olmadığında, ancak yine de modelin SignatureDef lerinin dtype ve şekline uyan bazı basit girdilerle modeli mantıklı bir şekilde kontrol etmek istediğinizde yararlı olabilir. Örneğin:

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

Python ifadelerine ek olarak, numpy işlevlerini de iletebilirsiniz. Örneğin:

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

( numpy modülünün sizin için zaten np olarak mevcut olduğunu unutmayın.)

--input_examples

tf.train.Example girdi olarak geçirmek için --input_examples seçeneğini belirtin. Her giriş tuşu için, her sözlüğün bir tf.train.Example örneği olduğu bir sözlük listesi alır. Sözlük tuşları, özelliklerdir ve değerler, her özelliğin değer listeleridir. Örneğin:

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

Çıktıyı kaydet

Varsayılan olarak, SavedModel CLI çıktıyı stdout'a yazar. Bir dizin --outdir seçeneğine aktarılırsa, çıktılar belirtilen dizinin altındaki çıkış tensör anahtarlarından sonra adlandırılan .npy dosyaları olarak kaydedilir.

Mevcut çıktı dosyalarının üzerine yazmak için --overwrite kullanın.