SavedModel biçimini kullanma

TensorFlow.org'da görüntüleyin Google Colab'da çalıştırın Kaynağı GitHub'da görüntüleyin Not defterini indir

SavedModel, eğitilmiş parametreler (yani, tf.Variable s) ve hesaplama dahil olmak üzere eksiksiz bir TensorFlow programı içerir. Çalıştırmak için orijinal model oluşturma kodunu gerektirmez, bu da onu TFLite , TensorFlow.js , TensorFlow Serving veya TensorFlow Hub ile paylaşmak veya dağıtmak için kullanışlı hale getirir.

Aşağıdaki API'leri kullanarak bir modeli SavedModel biçiminde kaydedebilir ve yükleyebilirsiniz:

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 birlikte görüntü sınıflandırma isteklerini 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.list_physical_devices('GPU')
for device in physical_devices:
  tf.config.experimental.set_memory_growth(device, True)
yer tutucu2 l10n-yer
file = tf.keras.utils.get_file(
    "grace_hopper.jpg",
    "https://storage.googleapis.com/download.tensorflow.org/example_images/grace_hopper.jpg")
img = tf.keras.utils.load_img(file, target_size=[224, 224])
plt.imshow(img)
plt.axis('off')
x = tf.keras.utils.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

Çalışan bir örnek olarak Grace Hopper'ın bir görüntüsünü ve kullanımı kolay olduğu için Keras tarafından önceden eğitilmiş bir görüntü sınıflandırma modelini kullanacaksınız. Özel modeller de çalışır ve daha sonra ayrıntılı olarak ele alını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
24576/10484 [======================================================================] - 0s 0us/step
yer tutucu6 l10n-yer
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']

Bu görüntü için en iyi tahmin "askeri üniforma".

mobilenet_save_path = os.path.join(tmpdir, "mobilenet/1/")
tf.saved_model.save(pretrained_model, mobilenet_save_path)
tutucu9 l10n-yer
2021-10-27 01:24:27.831628: 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/tmpbf9fpzwt/mobilenet/1/assets

Kaydetme yolu, son yol bileşeninin ( 1/ burada) modeliniz için bir sürüm numarası olduğu TensorFlow Serving tarafından kullanılan bir kuralı izler - 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 yükleyebilir ve Admiral 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"]
tutucu11 l10n-yer
['serving_default']

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

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

SavedModel'den çıkarımın çalıştırılması, 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)
tutucu15 l10n-yer
Result after saving and loading:
 ['military uniform' 'bow tie' 'suit' 'bearskin' 'pickelhaube']

TensorFlow Sunumunda SavedModel Çalıştırma

SavedModel'ler 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. TensorFlow Serving kullanarak SavedModel'den bu kurulumu yapmak kolaydır.

Uçtan uca bir tensorflow sunma örneği için TensorFlow Hizmet Verme REST öğreticisine bakın.

Diskteki SavedModel biçimi

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

ls {mobilenet_save_path}
tutucu17 l10n-yer
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ı saklar.

SavedModels, modelin birden çok türevini içerebilir (birden çok v1.MetaGraphDefs , --tag_set ile --tag_set olarak 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
tutucu19 l10n-yer
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
tutucu21 l10n-yer
variables.data-00000-of-00001  variables.index

assets dizini, örneğin sözcük tablolarını başlatmak için kullanılan metin dosyaları gibi TensorFlow grafiği tarafından kullanılan dosyaları içerir. Bu örnekte kullanılmamıştır.

SavedModels, TensorFlow grafiği tarafından kullanılmayan herhangi bir dosya için, örneğin tüketiciler için SavedModel ile ne yapacaklarına ilişkin bilgiler için bir assets.extra dizinine sahip olabilir. TensorFlow'un kendisi bu dizini kullanmaz.

Özel bir model kaydetme

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

Bir tf.Module kaydetme ve geri yükleme örneğine bakalım.

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 kaydettiğinizde, özyinelemeli geçiş yoluyla bulunan tüm tf.Variable öznitelikleri, tf.function -decorated yöntemleri ve tf.Module s kaydedilir. (Bu özyinelemeli geçiş hakkında daha fazla bilgi için Kontrol Noktası öğreticisine bakın.) Ancak, tüm Python öznitelikleri, işlevleri ve verileri kaybolur. Bu, bir tf.function . işlevi kaydedildiğinde, Python kodunun kaydedilmediği anlamına gelir.

Python kodu kaydedilmemişse, 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 de tf.function ConcreteFunctions önbelleğini kaydetmiş olursunuz.

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)
tutucu24 l10n-yer
Tracing with Tensor("x:0", shape=(), dtype=float32)
Saving model...
Tracing with Tensor("x:0", shape=(), dtype=float32)
INFO:tensorflow:Assets written to: /tmp/tmpbf9fpzwt/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 kaydedilen tf.Module ile 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.]))
tutucu27 l10n-yer
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 destek yapabilirsiniz. Basit durumlarda bir SavedModel'e ince ayar yapmak (yani yeniden eğitmek) için bu 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()))
-yer tutucu30 l10n-yer
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 almak için düz bir __call__ __'den daha fazla ayrıntı sağlar. TensorFlow Hub, varsa, ince ayar amacıyla paylaşılan SavedModel'lerde 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 (toplu normalleştirme gibi) başka bir teknik kullanıyorsa, __call__ yöntemi, varsayılan olarak False olan ancak True olarak ayarlanabilen isteğe bağlı, Python değerli bir training= argümanı alır.
  • .trainable_variable özniteliğinin yanında, karşılık gelen değişken listeleriyle birlikte .variable ve __call__ öznitelikleri vardır. Başlangıçta eğitilebilir olan ancak ince ayar sırasında dondurulması amaçlanan bir değişken .trainable_variables .
  • Katmanların veya alt modellerin öznitelikleri olarak ağırlık düzenleyicileri temsil eden Keras gibi çerçeveler adına, bir .regularization_losses özniteliği de olabilir. Değerleri toplam kayba eklenecek olan sıfır argümanlı fonksiyonların bir listesini tutar.

İlk MobileNet örneğine geri dönersek, bunlardan bazılarını çalışırken 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, ...
yer tutucu33 l10n-yer
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ı belirtme

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

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

assert len(imported.signatures) == 0

Bir hizmet imzası bildirmek için, kwarg signatures kullanarak bir SomutFonksiyon belirtin. Tek bir imza belirtilirken, imza anahtarı 'serving_default' olacaktır ve bu sabit tf.saved_model.DEFAULT_SERVING_SIGNATURE_DEF_KEY olarak kaydedilir.

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/tmpbf9fpzwt/module_with_signature/assets
yer tutucu38 l10n-yer
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, bir imza anahtarları sözlüğünü ConcreteFunctions'a iletin. Her imza anahtarı bir Beton İşlevine 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/tmpbf9fpzwt/module_with_multiple_signatures/assets
yer tutucu42 l10n-yer
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, çıktı adlarını çıktılara eşleyen bir sözlük döndürmek için tf.function değiştirin. Girdilerin adları, Python işlevinin argüman adlarından 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/tmpbf9fpzwt/module_with_output_name/assets
yer tutucu46 l10n-yer
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ükleyin

SavedModel yükleyicisinin 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 belirtmeniz gerekir. SavedModel'in yüklenen sürümü SavedModelBundle olarak adlandırılır ve MetaGraphDef'i ve 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ı arabiriminin ayrıntıları

SavedModel'i incelemek ve yürütmek için SavedModel Komut Satırı Arabirimini (CLI) kullanabilirsiniz. Örneğin, modelin SignatureDef s'lerini incelemek için CLI'yi kullanabilirsiniz. CLI, giriş Tensör tipinin ve şeklinin modelle eşleştiğini hızlı bir şekilde doğrulamanızı sağlar. Ayrıca, modelinizi test etmek istiyorsanız, çeşitli biçimlerde (örneğin, Python ifadeleri) örnek girdileri ileterek ve ardından çıktıyı alarak bir akıl sağlığı kontrolü yapmak için CLI'yi kullanabilirsiniz.

SavedModel CLI'yi yükleyin

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

  • Önceden oluşturulmuş bir TensorFlow ikili dosyası yükleyerek.
  • Kaynak kodundan TensorFlow oluşturarak.

TensorFlow'u önceden oluşturulmuş bir TensorFlow ikili dosyası aracılığıyla kurduysanız, SavedModel CLI zaten sisteminizde bin/saved_model_cli yol adına kuruludur.

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 üzerinde aşağıdaki iki komutu destekler:

  • SavedModel'de bulunan hesaplamaları gösteren show .
  • SavedModel'den bir hesaplama run .

komutu show

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

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 çok etiket varsa, her bir etiket bir 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 TensorInfo tüm giriş ve çıkışlarını göstermek için SignatureDef anahtarını signature_def seçeneğine iletin. Bu, daha sonra hesaplama grafiğini yürütmek için giriş tensörlerinin tensör anahtar değerini, türünü 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

Girdileri geçirerek ve ardından çıktıları görüntüleyerek (ve isteğe bağlı olarak kaydederek) bir grafik hesaplaması çalıştırmak için run komutunu çalıştırın. İşte sözdizimi:

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 iletmek 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 iletmenizi sağlar.
  • --input_examples seçeneği tf.train.Example sağlar.

--inputs

Dosyalardaki girdi 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 biri olduğunda:

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

Birden fazla GİRİŞ iletebilirsiniz. Birden çok giriş iletirseniz, INPUTS'ların her birini ayırmak için noktalı virgül kullanın.

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

  • .npy
  • .npz
  • turşu formatı

Bir .npy dosyası her zaman bir numpy ndarray içerir. Bu nedenle, bir .npy dosyasından yüklenirken 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ükleme yaparken, giriş tensörü anahtarı için yüklenecek zip dosyasındaki değişkeni tanımlamak için isteğe bağlı olarak bir değişken_adı belirtebilirsiniz. Bir değişken_adı belirtmezseniz, SavedModel CLI, zip dosyasında yalnızca bir dosyanın olup olmadığını kontrol edecek ve belirtilen giriş tensörü anahtarı için onu yükleyecektir.

Turşu dosyasından yükleme yaparken, köşeli parantezlerde variable_name belirtilmemişse, turşu dosyasının içinde ne varsa, belirtilen giriş tensör anahtarına iletilecektir. Aksi takdirde, SavedModel CLI, turşu dosyasında bir sözlüğün depolandığını varsayar ve değişken_adı'na karşılık gelen 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 s'nin türü ve şekliyle eşleşen bazı basit girdilerle modeli sağlıklı bir şekilde kontrol etmek istediğinizde faydalı olabilir. Örneğin:

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

Python ifadelerine ek olarak, numpy fonksiyonlarını da 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 iletmek için --input_examples seçeneğini belirtin. Her giriş anahtarı için, her sözlüğün bir tf.train.Example örneği olduğu bir sözlük listesi alır. Sözlük anahtarları özelliklerdir ve değerler her bir ö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 geçirilirse, çıktılar verilen dizin altında çıktı tensör anahtarlarından sonra adlandırılan .npy dosyaları olarak kaydedilir.

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