ML Topluluk Günü 9 Kasım! TensorFlow, JAX güncellemeler için bize katılın ve daha fazla bilgi edinin

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

Bir SavedModel eğitilmiş parametreleri (yani dahil olmak üzere komple TensorFlow programı içerir tf.Variable ler) ve hesaplama. Bu paylaşımı veya birlikte dağıtmak için yararlı bir hale getirir vadede özgün model kurma kodu gerektirmez TFLite , TensorFlow.js , TensorFlow hizmet veren veya TensorFlow Hub .

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 istekleri 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)
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
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)
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

Tasarrufu yolu son yol bileşeni (Sunma TensorFlow tarafından kullanılan bir kongre izler 1/ burada) Modeliniz için bir sürüm numarası - bu Tensorflow göreceli tazelik konusunda akla hizmet veren gibi araçlar sağlar.

Sen ile Python içine SavedModel geri yükleyebilirsiniz tf.saved_model.load ve Amiral Hopper'ın görüntü sınıflandırılır nasıl olduğuna bakın.

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ükleri döndürür. İmza adları ve çıkış sözlüğü tuşları ö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ı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)
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.

Bkz DİNLENME öğretici Porsiyon TensorFlow uçtan uca tensorflow hizmet eden örneğin.

Diskteki SavedModel biçimi

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

ls {mobilenet_save_path}
assets  saved_model.pb  variables

saved_model.pb dosyada fiili TensorFlow programı veya model ve adlandırılmış imzaların kümesi, her tensör girişlerini kabul eder ve tensör çıkışları üreten bir işlev tanımlama.

SavedModels (çoklu modelin birden varyantlarını içerebilir v1.MetaGraphDefs ile özdeşleşmiş, --tag_set için bayrak saved_model_cli ), ancak bu nadirdir. Bir modelin birden varyantlarını oluşturmak API'ler dahil tf.Estimator.experimental_export_all_saved_models ve TensorFlow 1.x içinde 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 dizin standart bir eğitim kontrol noktasını (bkz içeren eğitim kontrol noktaları kılavuzu ).

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

assets dizini kelime tabloları başlatmak için kullanılan örnek metin dosyaları için TensorFlow grafiğiyle kullanılan dosyaları içerir. Bu örnekte kullanılmamıştır.

SavedModels bir olabilir assets.extra SavedModel ile yapmanız gerekenler hakkında tüketiciler için örnek bilgi için TensorFlow grafikte tarafından kullanılmayan herhangi bir dosya için dizin. TensorFlow'un kendisi bu dizini kullanmaz.

Özel bir model kaydetme

tf.saved_model.save tasarruf destekler tf.Module gibi nesneleri ve onun alt sınıfları, tf.keras.Layer ve tf.keras.Model .

Tasarruf ve geri bir örneğe atalım 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 tasarruf zaman tf.Module , herhangi tf.Variable nitelikleri, tf.function yöntemleri -dekore ve tf.Module s özyinelemeli geçişi aracılığıyla bulunan kaydedilir. (Bkz Checkpoint öğretici bu özyinelemeli geçişi hakkında daha fazla bilgi için.) Ancak, herhangi bir Python, niteliklerini fonksiyonları ve veri kaybolur. Bir bu araç o tf.function kaydedilir, hiçbir Python kodu kaydedilir.

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

Kısaca, tf.function bir ConcreteFunction (etrafında çağrılabilir sarmalayıcı oluşturmak için Python kodunu takip ederek çalışır tf.Graph ). Bir kaydedilirken tf.function , gerçekten kurtarıyorsun tf.function ConcreteFunctions ait önbelleğini.

Arasındaki ilişki hakkında daha fazla bilgi edinmek için tf.function ve ConcreteFunctions, bkz tf.function kılavuzu .

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

Özel bir model yükleme ve kullanma

Eğer Python bir SavedModel, tüm yüklediğinizde tf.Variable özelliklerini, tf.function yöntemleri -dekore ve tf.Module orijinal kurtardı lar aynı nesne yapısında geri yüklenir 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

Hiçbir Python kodu kaydedildi olduğundan, bir çağırma tf.function yeni girdi imzası ile 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 backprop 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()))
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 A SavedModel sağlar fazla ayrıntı düz daha __call__ ince ayar daha gelişmiş durumlarda adrese. TensorFlow Hub, varsa, ince ayar amacıyla paylaşılan SavedModel'lerde aşağıdakilerin sağlanmasını önerir:

  • Model kullandığı bırakma ya da başka teknik, hangi eğitim ve (toplu normalleştirme gibi) çıkarsama arasındaki ileri pas farklılık, varsa __call__ yöntemi isteğe bağlı, Python değerli alır training= varsayılan bu argümanı False ama ayarlanabilir True .
  • Yanındaki __call__ özniteliği vardır .variable ve .trainable_variable değişkenlerin gelen listeleri ile nitelikler. Başlangıçta eğitilebilen ama ince ayarlama sırasında dondurulacak kastedilmektedir değişken çÛkarÛlmalÛdÛr .trainable_variables .
  • Katmanlar veya alt modellerin özellikler olarak ağırlık regularizers temsil keras gibi çerçeveler uğruna, aynı zamanda bir olabilir .regularization_losses özellik. 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, ...
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 gibi araçlar hizmet veren ve saved_model_cli SavedModels 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 ler otomatik imzaları hizmet belirtmek, ancak açıkça bizim özel modülleri için bir hizmet imzayı beyan etmek gerekecek.

Varsayılan olarak, hiçbir imza özel bildirilmiştir tf.Module .

assert len(imported.signatures) == 0

Bir porsiyon imzayı bildirmek için, kullanan bir ConcreteFunction belirtmek signatures kwarg. Tek bir imza belirtirken, onun imzası anahtarı olacaktır 'serving_default' sabiti olarak kaydedilir, 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/tmpbf9fpzwt/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, 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
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ı gibi oldukça geneldir output_0 . Çıkışların adlarını kontrol etmek için değiştirmek tf.function çıkışlarına çıkış adlarını eşleyen bir sözlük dönmek için. 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
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 C ++ sürüm yükleyici SessionOptions ve RunOptions izin verirken, bir yoldan bir 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 incelemek için CLI kullanabilirsiniz SignatureDef s. 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.

Eğer önceden oluşturulmuş TensorFlow ikili yoluyla TensorFlow yüklü ise, SavedModel CLI zaten yol adı en sisteminizde yüklü olan bin/saved_model_cli .

Eğer kaynak kodundan TensorFlow inşa varsa, yapı için aşağıdaki ek komutu çalıştırmalısınız saved_model_cli :

$ bazel build tensorflow/python/tools:saved_model_cli

Komutlara genel bakış

SavedModel CLI, SavedModel üzerinde aşağıdaki iki komutu destekler:

  • show bir SavedModel dan olan Şekil hesaplamaları mevcuttur.
  • run bir SavedModel bir hesaplama çalıştığı,.

show komut

Bir SavedModel (teknik olarak bir veya birden fazla modeli varyantları içeren v1.MetaGraphDef , onların etiket setleri tarafından tespit ler). Bir model hizmet etmek, ne tür ne işe yarayacağı SignatureDef s her model varyantı vardır, ve bunların giriş ve çıkışları şeylerdir. show komutu hiyerarşik sırayla SavedModel içeriğini inceleyelim. İş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 gösterileri mevcut tüm SignatureDef bir etiket kümesi için tuşları:

$ 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 etiketleri varsa, tüm etiketleri belirtmelisiniz, her etiket virgülle ayrılmış. Örneğin:

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

Tüm girdileri göstermek ve belirli için TensorInfo çıkışı için SignatureDef , geçmek SignatureDef anahtarı signature_def seçeneği. 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 tüm mevcut bilgileri göstermek için, kullanmak --all seçeneği. Ö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

run komutu

Çağırır run komutu çıkışları giriş geçen ve daha sonra görüntülendiği (ve isteğe bağlı olarak kaydetme), bir grafiktir hesaplama ç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 modeline girdileri geçmesine aşağıdaki üç yol sunar:

  • --inputs seçenek dosyalarında numpy ndarray geçmesine olanak sağlar.
  • --input_exprs seçenek Python ifadeleri geçmesine olanak sağlar.
  • --input_examples seçenek geçmesine olanak tf.train.Example .

--inputs

Dosyalardaki girdi veri iletmek için belirtmek --inputs aşağıdaki genel biçimi alır seçeneği:

--inputs <INPUTS>

nerede GİRDİLER aşağıdaki biçimlerden biri geçerlidir:

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

Birden GİRİŞİ geçebilir. Birden girdileri geçmesi yaparsanız, GİRDİLER her ayırmak için noktalı virgül kullanın.

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

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

Bir .npy dosyası her zaman bir numpy ndarray içeriyor. Bu nedenle, yükleme bir gelen zaman .npy dosyası, içerik doğrudan belirtilen giriş tensör atanacaktır. Bununla bir variable_name belirtirseniz .npy dosyası, değişken_adı yok sayılacak ve bir uyarı verilecektir.

Bir gelen yükleme yaparken .npz (zip) dosyası, isteğe bağlı giriş tensör anahtarı için yüklemek için zip dosyası içinde değişken tanımlamak için bir variable_name belirleyebilir. Bir variable_name belirtmezseniz, SavedModel CLI sadece bir dosya zip dosyasına dahil olup olmadığını ve belirtilen giriş tensör anahtar için onu yükleyecektir.

Hiçbir eğer bir turşu dosyasından yükleme, zaman variable_name köşeli parantez içinde belirlenir, bu turşu dosyası içindeki her neyse belirtilen giriş tensör anahtarına geçilecek. Aksi takdirde, SavedModel CLI bir sözlük turşu dosyasında saklanır ve değişken_adı karşı gelen değer kullanılacaktır üstlenecek.

--input_exprs

Python ifadeleri ile girdi geçirmek için belirtmek --input_exprs seçeneği. Bu modelin bir d_type ve şekline uyan bazı basit girişli modeli kontrol etrafında yatan veri dosyalarını olmadığı zamanlarda için yararlı olabilir, ama yine de aklı istiyor olabilir SignatureDef s. Ö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))`

(Bu Not numpy modül olarak size zaten mevcuttur np .)

--input_examples

Geçmek için tf.train.Example belirtin girdi olarak --input_examples seçeneği. Her bir giriş anahtarı için, her Sözlük bir örneği olan sözlüğe bir listesini alır tf.train.Example . Sözlük anahtarları özelliklerdir ve değerler her bir özellik iç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 geçirilir ise --outdir seçeneği, çıkışlar olarak kaydedilecektir .npy verilen dizin altındaki çıkış tensör tuşları adını dosyaları.

Kullanım --overwrite varolan bir dosyanın üzerine yazmak.