Lihat di TensorFlow.org | Jalankan di Google Colab | Lihat sumber di GitHub | Unduh buku catatan |
SavedModel berisi program TensorFlow lengkap, termasuk parameter terlatih (yaitu, tf.Variable
s) dan komputasi. Itu tidak memerlukan kode pembuatan model asli untuk dijalankan, yang membuatnya berguna untuk dibagikan atau diterapkan dengan TFLite , TensorFlow.js , TensorFlow Serving , atau TensorFlow Hub .
Anda dapat menyimpan dan memuat model dalam format SavedModel menggunakan API berikut:
- API
tf.saved_model
tingkat rendah. Dokumen ini menjelaskan cara menggunakan API ini secara mendetail.- Simpan:
tf.saved_model.save(model, path_to_dir)
- Muat:
model = tf.saved_model.load(path_to_dir)
- Simpan:
- API
tf.keras.Model
tingkat tinggi. Lihat panduan keras save and serialize . - Jika Anda hanya ingin menyimpan/memuat beban selama latihan, lihat panduan pos pemeriksaan .
Membuat SavedModel dari Keras
Untuk pengenalan singkat, bagian ini mengekspor model Keras yang telah dilatih sebelumnya dan melayani permintaan klasifikasi gambar dengannya. Panduan selanjutnya akan mengisi detail dan mendiskusikan cara lain untuk membuat SavedModels.
import os
import tempfile
from matplotlib import pyplot as plt
import numpy as np
import tensorflow as tf
tmpdir = tempfile.mkdtemp()
physical_devices = tf.config.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
Anda akan menggunakan gambar Grace Hopper sebagai contoh berjalan, dan model klasifikasi gambar terlatih Keras karena mudah digunakan. Model khusus juga berfungsi, dan dibahas secara mendetail nanti.
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']
Prediksi teratas untuk gambar ini adalah "seragam militer".
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
Save-path mengikuti konvensi yang digunakan oleh TensorFlow Serving di mana komponen jalur terakhir ( 1/
di sini) adalah nomor versi untuk model Anda - ini memungkinkan alat seperti Tensorflow Serving untuk mempertimbangkan kesegaran relatif.
Anda dapat memuat SavedModel kembali ke Python dengan tf.saved_model.load
dan melihat bagaimana gambar Admiral Hopper diklasifikasikan.
loaded = tf.saved_model.load(mobilenet_save_path)
print(list(loaded.signatures.keys())) # ["serving_default"]
['serving_default']
Tanda tangan yang diimpor selalu mengembalikan kamus. Untuk menyesuaikan nama tanda tangan dan mengeluarkan kunci kamus, lihat Menentukan tanda tangan selama ekspor .
infer = loaded.signatures["serving_default"]
print(infer.structured_outputs)
{'predictions': TensorSpec(shape=(None, 1000), dtype=tf.float32, name='predictions')}
Menjalankan inferensi dari SavedModel memberikan hasil yang sama seperti model aslinya.
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']
Menjalankan SavedModel di TensorFlow Serving
SavedModels dapat digunakan dari Python (lebih lanjut tentang itu di bawah), tetapi lingkungan produksi biasanya menggunakan layanan khusus untuk inferensi tanpa menjalankan kode Python. Ini mudah disiapkan dari SavedModel menggunakan TensorFlow Serving.
Lihat tutorial TensorFlow Serving REST untuk contoh penyajian tensorflow end-to-end.
Format SavedModel pada disk
SavedModel adalah direktori yang berisi tanda tangan serial dan status yang diperlukan untuk menjalankannya, termasuk nilai variabel dan kosakata.
ls {mobilenet_save_path}
assets saved_model.pb variables
File saved_model.pb
menyimpan program atau model TensorFlow aktual, dan sekumpulan tanda tangan bernama, masing-masing mengidentifikasi fungsi yang menerima input tensor dan menghasilkan output tensor.
SavedModels mungkin berisi beberapa varian model (beberapa v1.MetaGraphDefs
, diidentifikasi dengan tanda --tag_set
ke saved_model_cli
), tetapi ini jarang terjadi. API yang membuat beberapa varian model mencakup tf.Estimator.experimental_export_all_saved_models
dan di TensorFlow 1.x 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"
Direktori variables
berisi pos pemeriksaan pelatihan standar (lihat panduan untuk pos pemeriksaan pelatihan ).
ls {mobilenet_save_path}/variables
variables.data-00000-of-00001 variables.index
Direktori assets
berisi file yang digunakan oleh grafik TensorFlow, misalnya file teks yang digunakan untuk menginisialisasi tabel kosakata. Ini tidak digunakan dalam contoh ini.
SavedModels mungkin memiliki direktori assets.extra
untuk file apa pun yang tidak digunakan oleh grafik TensorFlow, misalnya informasi untuk konsumen tentang apa yang harus dilakukan dengan SavedModel. TensorFlow sendiri tidak menggunakan direktori ini.
Menyimpan model khusus
tf.saved_model.save
mendukung penyimpanan objek tf.Module
dan subkelasnya, seperti tf.keras.Layer
dan tf.keras.Model
.
Mari kita lihat contoh menyimpan dan memulihkan 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()
Saat Anda menyimpan tf.Module
, semua atribut tf.Variable
, tf.function
methods, dan tf.Module
s yang ditemukan melalui traversal rekursif akan disimpan. (Lihat tutorial Checkpoint untuk mengetahui lebih lanjut tentang traversal rekursif ini.) Namun, semua atribut, fungsi, dan data Python hilang. Ini berarti bahwa ketika tf.function
disimpan, tidak ada kode Python yang disimpan.
Jika tidak ada kode Python yang disimpan, bagaimana SavedModel mengetahui cara mengembalikan fungsinya?
Secara singkat, tf.function
bekerja dengan menelusuri kode Python untuk menghasilkan ConcreteFunction (pembungkus yang dapat dipanggil di sekitar tf.Graph
). Saat menyimpan tf.function
, Anda benar-benar menyimpan cache tf.function
dari ConcreteFunctions.
Untuk mempelajari lebih lanjut tentang hubungan antara tf.function
dan ConcreteFunctions, lihat panduan tf.function .
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
Memuat dan menggunakan model khusus
Saat Anda memuat SavedModel dengan Python, semua atribut tf.Variable
, tf.function
method, dan tf.Module
s dipulihkan dalam struktur objek yang sama dengan tf.Module
asli yang disimpan.
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
Karena tidak ada kode Python yang disimpan, pemanggilan tf.function
dengan input signature baru akan gagal:
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'),), {})].
Penyetelan dasar
Objek variabel tersedia, dan Anda dapat melakukan backprop melalui fungsi yang diimpor. Itu cukup untuk menyempurnakan (yaitu melatih kembali) SavedModel dalam kasus-kasus sederhana.
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
Penyesuaian umum
SavedModel dari Keras memberikan lebih banyak detail daripada __call__
biasa untuk menangani kasus fine-tuning yang lebih canggih. TensorFlow Hub merekomendasikan untuk menyediakan yang berikut ini, jika berlaku, di SavedModels yang dibagikan untuk tujuan penyempurnaan:
- Jika model menggunakan dropout atau teknik lain di mana forward pass berbeda antara pelatihan dan inferensi (seperti normalisasi batch), metode
__call__
mengambil argumentraining=
bernilai Python opsional yang defaultnya adalahFalse
tetapi dapat disetel keTrue
. - Di sebelah atribut
__call__
, ada atribut.variable
dan.trainable_variable
dengan daftar variabel yang sesuai. Variabel yang awalnya dapat dilatih tetapi dimaksudkan untuk dibekukan selama fine-tuning dihilangkan dari.trainable_variables
. - Demi kerangka kerja seperti Keras yang mewakili pengatur bobot sebagai atribut lapisan atau sub-model, bisa juga ada atribut
.regularization_losses
. Ini memegang daftar fungsi argumen nol yang nilainya dimaksudkan untuk penambahan total kerugian.
Kembali ke contoh MobileNet awal, Anda dapat melihat beberapa di antaranya beraksi:
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, ...
Menentukan tanda tangan selama ekspor
Alat seperti TensorFlow Serving dan saved_model_cli
dapat berinteraksi dengan SavedModels. Untuk membantu alat ini menentukan Fungsi Beton yang akan digunakan, Anda perlu menentukan tanda tangan penyajian. tf.keras.Model
s secara otomatis menentukan tanda tangan penyajian, tetapi Anda harus secara eksplisit mendeklarasikan tanda tangan penyajian untuk modul khusus kami.
Secara default, tidak ada tanda tangan yang dideklarasikan dalam tf.Module
kustom.
assert len(imported.signatures) == 0
Untuk mendeklarasikan tanda tangan penyajian, tentukan ConcreteFunction menggunakan signatures
kwarg. Saat menentukan satu tanda tangan, kunci tanda tangannya adalah 'serving_default'
, yang disimpan sebagai konstanta 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']
Untuk mengekspor banyak tanda tangan, berikan kamus kunci tanda tangan ke ConcreteFunctions. Setiap kunci tanda tangan sesuai dengan satu ConcreteFunction.
module_multiple_signatures_path = os.path.join(tmpdir, 'module_with_multiple_signatures')
signatures = {"serving_default": call,
"array_input": module.__call__.get_concrete_function(tf.TensorSpec([None], tf.float32))}
tf.saved_model.save(module, module_multiple_signatures_path, signatures=signatures)
Tracing with Tensor("x:0", shape=(None,), dtype=float32) Tracing with Tensor("x:0", shape=(None,), dtype=float32) INFO:tensorflow:Assets written to: /tmp/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']
Secara default, nama tensor output cukup umum, seperti output_0
. Untuk mengontrol nama keluaran, ubah tf.function
Anda untuk mengembalikan kamus yang memetakan nama keluaran ke keluaran. Nama-nama input berasal dari nama arg fungsi Python.
class CustomModuleWithOutputName(tf.Module):
def __init__(self):
super(CustomModuleWithOutputName, self).__init__()
self.v = tf.Variable(1.)
@tf.function(input_signature=[tf.TensorSpec([], tf.float32)])
def __call__(self, x):
return {'custom_output_name': x * self.v}
module_output = CustomModuleWithOutputName()
call_output = module_output.__call__.get_concrete_function(tf.TensorSpec(None, tf.float32))
module_output_path = os.path.join(tmpdir, 'module_with_output_name')
tf.saved_model.save(module_output, module_output_path,
signatures={'serving_default': call_output})
INFO:tensorflow:Assets written to: /tmp/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')}
Muat Model Tersimpan di C++
Loader SavedModel versi C++ menyediakan API untuk memuat SavedModel dari jalur, sekaligus mengizinkan SessionOptions dan RunOptions. Anda harus menentukan tag yang terkait dengan grafik yang akan dimuat. Versi SavedModel yang dimuat disebut sebagai SavedModelBundle dan berisi MetaGraphDef dan sesi di mana ia dimuat.
const string export_dir = ...
SavedModelBundle bundle;
...
LoadSavedModel(session_options, run_options, export_dir, {kSavedModelTagTrain},
&bundle);
Detail antarmuka baris perintah SavedModel
Anda dapat menggunakan SavedModel Command Line Interface (CLI) untuk memeriksa dan menjalankan SavedModel. Misalnya, Anda dapat menggunakan CLI untuk memeriksa SignatureDef
s model. CLI memungkinkan Anda mengonfirmasi dengan cepat bahwa jenis dan bentuk Tensor input cocok dengan model. Selain itu, jika Anda ingin menguji model Anda, Anda dapat menggunakan CLI untuk melakukan pemeriksaan kewarasan dengan memasukkan input sampel dalam berbagai format (misalnya, ekspresi Python) dan kemudian mengambil outputnya.
Instal CLI Model Tersimpan
Secara garis besar, Anda dapat menginstal TensorFlow dengan salah satu dari dua cara berikut:
- Dengan menginstal biner TensorFlow bawaan.
- Dengan membangun TensorFlow dari kode sumber.
Jika Anda menginstal TensorFlow melalui biner TensorFlow bawaan, maka SavedModel CLI sudah diinstal pada sistem Anda di pathname bin/saved_model_cli
.
Jika Anda membuat TensorFlow dari kode sumber, Anda harus menjalankan perintah tambahan berikut untuk membuat saved_model_cli
:
$ bazel build tensorflow/python/tools:saved_model_cli
Ikhtisar perintah
CLI SavedModel mendukung dua perintah berikut pada SavedModel:
-
show
, yang menunjukkan komputasi yang tersedia dari SavedModel. -
run
, yang menjalankan komputasi dari SavedModel.
show
perintah
SavedModel berisi satu atau beberapa varian model (secara teknis, v1.MetaGraphDef
s), yang diidentifikasi oleh kumpulan tagnya. Untuk menyajikan model, Anda mungkin bertanya-tanya apa jenis SignatureDef
di setiap varian model, dan apa input dan outputnya. Perintah show
memungkinkan Anda memeriksa konten SavedModel dalam urutan hierarkis. Berikut sintaksnya:
usage: saved_model_cli show [-h] --dir DIR [--all]
[--tag_set TAG_SET] [--signature_def SIGNATURE_DEF_KEY]
Misalnya, perintah berikut menunjukkan semua kumpulan tag yang tersedia di SavedModel:
$ saved_model_cli show --dir /tmp/saved_model_dir
The given SavedModel contains the following tag-sets:
serve
serve, gpu
Perintah berikut menampilkan semua kunci SignatureDef
yang tersedia untuk kumpulan tag:
$ 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"
Jika ada beberapa tag dalam kumpulan tag, Anda harus menentukan semua tag, setiap tag dipisahkan dengan koma. Sebagai contoh:
$ saved_model_cli show --dir /tmp/saved_model_dir --tag_set serve,gpu
Untuk menampilkan semua input dan output TensorInfo untuk SignatureDef
tertentu, teruskan kunci SignatureDef
ke opsi signature_def
. Hal ini sangat berguna ketika Anda ingin mengetahui nilai tensor key, dtype dan bentuk tensor input untuk mengeksekusi grafik komputasi nantinya. Sebagai contoh:
$ 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
Untuk menampilkan semua informasi yang tersedia di SavedModel, gunakan opsi --all
. Sebagai contoh:
$ 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
perintah
Panggil perintah run
untuk menjalankan perhitungan grafik, meneruskan input dan kemudian menampilkan (dan secara opsional menyimpan) output. Berikut sintaksnya:
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]
Perintah run
menyediakan tiga cara berikut untuk meneruskan input ke model:
-
--inputs
opsi memungkinkan Anda untuk melewatkan ndarray numpy dalam file. -
--input_exprs
opsi memungkinkan Anda untuk melewatkan ekspresi Python. -
--input_examples
opsi memungkinkan Anda untuk lulustf.train.Example
.
--inputs
Untuk meneruskan data input dalam file, tentukan opsi --inputs
, yang mengambil format umum berikut:
--inputs <INPUTS>
di mana INPUT adalah salah satu dari format berikut:
-
<input_key>=<filename>
-
<input_key>=<filename>[<variable_name>]
Anda dapat melewati beberapa INPUT . Jika Anda melewatkan beberapa input, gunakan titik koma untuk memisahkan setiap INPUT .
saved_model_cli
menggunakan numpy.load
untuk memuat nama file . Nama file mungkin dalam salah satu format berikut:
-
.npy
-
.npz
- format acar
File .npy
selalu berisi ndarray numpy. Oleh karena itu, saat memuat dari file .npy
, konten akan langsung ditetapkan ke tensor input yang ditentukan. Jika Anda menentukan nama_variabel dengan file .npy
itu, nama_variabel akan diabaikan dan peringatan akan dikeluarkan.
Saat memuat dari file .npz
(zip), Anda dapat secara opsional menentukan nama_variabel untuk mengidentifikasi variabel dalam file zip yang akan dimuat untuk kunci tensor input. Jika Anda tidak menentukan variabel_name , SavedModel CLI akan memeriksa bahwa hanya satu file yang disertakan dalam file zip dan memuatnya untuk kunci tensor input yang ditentukan.
Saat memuat dari file acar, jika tidak ada variable_name
yang ditentukan dalam tanda kurung siku, apa pun yang ada di dalam file acar akan diteruskan ke kunci tensor input yang ditentukan. Jika tidak, CLI SavedModel akan menganggap kamus disimpan dalam file acar dan nilai yang sesuai dengan nama_variabel akan digunakan.
--input_exprs
Untuk meneruskan input melalui ekspresi Python, tentukan opsi --input_exprs
. Ini dapat berguna ketika Anda tidak memiliki file data yang tergeletak di sekitar, tetapi masih ingin memeriksa kewarasan model dengan beberapa input sederhana yang cocok dengan dtype dan bentuk dari model SignatureDef
s. Sebagai contoh:
`<input_key>=[[1],[2],[3]]`
Selain ekspresi Python, Anda juga dapat melewatkan fungsi numpy. Sebagai contoh:
`<input_key>=np.ones((32,32,3))`
(Perhatikan bahwa modul numpy
sudah tersedia untuk Anda sebagai np
.)
--input_examples
Untuk meneruskan tf.train.Example
sebagai input, tentukan opsi --input_examples
. Untuk setiap kunci input, dibutuhkan daftar kamus, di mana setiap kamus adalah turunan dari tf.train.Example
. Kunci kamus adalah fitur dan nilainya adalah daftar nilai untuk setiap fitur. Sebagai contoh:
`<input_key>=[{"age":[22,24],"education":["BS","MS"]}]`
Simpan keluaran
Secara default, CLI SavedModel menulis output ke stdout. Jika sebuah direktori diteruskan ke opsi --outdir
, output akan disimpan sebagai file .npy
yang dinamai dengan kunci tensor output di bawah direktori yang diberikan.
Gunakan --overwrite
untuk menimpa file keluaran yang ada.