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:
- Düşük seviyeli
tf.saved_model
API'si. Bu belge, bu API'nin nasıl kullanılacağını ayrıntılı olarak açıklar.- Kaydet:
tf.saved_model.save(model, path_to_dir)
- Yük:
model = tf.saved_model.load(path_to_dir)
- Kaydet:
- Üst düzey
tf.keras.Model
API'si. Keras kaydetme ve serileştirme kılavuzuna bakın. - Antrenman sırasında sadece ağırlık kaydetmek/yüklemek istiyorsanız , kontrol noktaları kılavuzuna bakın.
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-yerfile = 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
Ç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/stepyer 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-yer2021-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-yerResult 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-yerassets 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-yerThe 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-yervariables.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-yerTracing 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-yerValueError: 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-yerloss=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 olarakFalse
olan ancakTrue
olarak ayarlanabilen isteğe bağlı, Python değerli birtraining=
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/assetsyer 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/assetsyer 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/assetsyer 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ğitf.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.