সাহায্য Kaggle উপর TensorFlow সঙ্গে গ্রেট বেরিয়ার রিফ রক্ষা চ্যালেঞ্জ যোগদান

SavedModel ফরম্যাট ব্যবহার করে

TensorFlow.org এ দেখুন GitHub-এ উৎস দেখুন নোটবুক ডাউনলোড করুন

একজন SavedModel প্রশিক্ষিত পরামিতি (অর্থাত, সহ একটি সম্পূর্ণ TensorFlow প্রোগ্রাম রয়েছে tf.Variable গুলি) এবং গণনার। এটি চালানোর জন্য মূল মডেল ভবন কোড, যার ফলে এটি ভাগ করা বা সঙ্গে স্থাপনার জন্য উপযোগী করে তোলে প্রয়োজন হয় না TFLite , TensorFlow.js , TensorFlow পরিবেশন করছে , অথবা TensorFlow হাব

আপনি নিম্নলিখিত API ব্যবহার করে SavedModel বিন্যাসে একটি মডেল সংরক্ষণ এবং লোড করতে পারেন:

কেরাস থেকে একটি সংরক্ষিত মডেল তৈরি করা হচ্ছে

একটি দ্রুত পরিচয়ের জন্য, এই বিভাগটি একটি প্রাক-প্রশিক্ষিত কেরাস মডেল রপ্তানি করে এবং এটির সাথে চিত্র শ্রেণীবিভাগের অনুরোধগুলি পরিবেশন করে। বাকি গাইড বিস্তারিত পূরণ করবে এবং 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

png

আপনি একটি চলমান উদাহরণ হিসাবে গ্রেস হপারের একটি চিত্র এবং একটি কেরাস প্রাক-প্রশিক্ষিত চিত্র শ্রেণিবিন্যাসের মডেল ব্যবহার করবেন কারণ এটি ব্যবহার করা সহজ। কাস্টম মডেলগুলিও কাজ করে এবং পরে বিস্তারিতভাবে কভার করা হয়।

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

এই ছবির জন্য শীর্ষ ভবিষ্যদ্বাণী হল "সামরিক ইউনিফর্ম"।

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-পাথ TensorFlow দ্বারা ব্যবহৃত একটি কনভেনশন পরিবেশন করছে যেখানে গত পাথ উপাদান (অনুসরণ 1/ এখানে) আপনার মডেল জন্য একটি সংস্করণ সংখ্যা - এটা মত Tensorflow আপেক্ষিক ঠাণ্ডাই সম্পর্কে কারণ পরিবেশন করছে টুলস পারেন।

আপনার সাথে পাইথন মধ্যে SavedModel ফিরে লোড করতে পারেন tf.saved_model.load এবং কিভাবে অ্যাডমিরাল ফড়িং ভাবমূর্তি শ্রেণীবদ্ধ করা হয় দেখুন।

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

আমদানিকৃত স্বাক্ষর সর্বদা অভিধান প্রদান করে। স্বাক্ষর নাম এবং আউটপুট অভিধান কী কাস্টোমাইজ করতে, দেখতে রপ্তানি সময় স্বাক্ষর নির্দিষ্ট করা

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

SavedModel থেকে চলমান অনুমান মূল মডেলের মতো একই ফলাফল দেয়।

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 সার্ভিং ব্যবহার করে একটি SavedModel থেকে এটি সেট আপ করা সহজ।

দেখুন TensorFlow বিশ্রাম টিউটোরিয়াল পরিবেশন করছে একটি এন্ড-টু-এন্ড tensorflow সার্ভিং উদাহরণস্বরূপ।

ডিস্কে সংরক্ষিত মডেল বিন্যাস

একটি SavedModel হল একটি ডিরেক্টরি যাতে ক্রমিক স্বাক্ষর এবং সেগুলি চালানোর জন্য প্রয়োজনীয় রাষ্ট্র, পরিবর্তনশীল মান এবং শব্দভান্ডার সহ।

ls {mobilenet_save_path}
assets  saved_model.pb  variables

saved_model.pb ফাইল সঞ্চয় প্রকৃত TensorFlow প্রোগ্রাম, বা মডেল এবং নামে স্বাক্ষর একটি সেট, প্রতিটি একটি ফাংশন যা টেন্সর ইনপুট গ্রহণ করে এবং টেন্সর আউটপুট উত্পাদন করে চিহ্নিতকরণের।

SavedModels (একাধিক মডেল একাধিক রূপগুলো থাকতে পারে v1.MetaGraphDefs সঙ্গে চিহ্নিত, --tag_set পতাকা saved_model_cli ), কিন্তু এই বিরল। API গুলি যা একটি মডেল একাধিক রূপের সৃষ্টি অন্তর্ভুক্ত tf.Estimator.experimental_export_all_saved_models এবং 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"

variables ডিরেক্টরির একটি প্রমিত প্রশিক্ষণ চেকপয়েন্ট (দেখুন রয়েছে প্রশিক্ষণ চেকপয়েন্ট গাইড )।

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

assets ডিরেক্টরির TensorFlow গ্রাফ দ্বারা ব্যবহৃত ফাইল, উদাহরণস্বরূপ টেক্সট শব্দভান্ডার টেবিল আরম্ভ করতে ব্যবহৃত ফাইলের জন্য রয়েছে। এই উদাহরণে এটি অব্যবহৃত।

SavedModels একটি থাকতে পারে assets.extra কি SavedModel না সম্পর্কে ভোক্তাদের জন্য উদাহরণ তথ্যের জন্য, TensorFlow গ্রাফ দ্বারা ব্যবহৃত না কোনো ফাইলের জন্য নির্দেশিকা। TensorFlow নিজেই এই ডিরেক্টরি ব্যবহার করে না।

একটি কাস্টম মডেল সংরক্ষণ

tf.saved_model.save সমর্থন সংরক্ষণ tf.Module বস্তু এবং তার উপশ্রেণী মত tf.keras.Layer এবং tf.keras.Model

সংরক্ষণ এবং পুনরূদ্ধার একটি উদাহরণ যাক চেহারা 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()

আপনি যদি একটি সংরক্ষণ করেন tf.Module কোন tf.Variable গুণাবলীর tf.function -decorated পদ্ধতি, এবং tf.Module গুলি রিকার্সিভ ট্র্যাভেরসাল মাধ্যমে পাওয়া সংরক্ষিত হয়। (দেখুন চেকপয়েন্ট টিউটোরিয়াল তবে কোনো পাইথন বৈশিষ্ট্যাবলী ফাংশন, এবং তথ্য হারিয়ে যায় এই রিকার্সিভ ট্র্যাভেরসাল সম্পর্কে আরো জানার জন্য।)। এই উপায়ে একটি যে tf.function সংরক্ষিত হয়, কোন পাইথন কোড সংরক্ষিত হয়।

যদি কোন পাইথন কোড সংরক্ষিত না হয়, তাহলে সেভডমডেল কীভাবে ফাংশন পুনরুদ্ধার করতে জানে?

সংক্ষেপে, tf.function একটি ConcreteFunction (কাছাকাছি একটি callable মোড়কের জেনারেট করতে পাইথন কোড ট্রেসিং করে কাজ করে tf.Graph )। যখন একটি সংরক্ষণ tf.function , আপনি কি সত্যিই সংরক্ষণ করছেন tf.function ConcreteFunctions এর 'র ক্যাশে।

মধ্যে সম্পর্ক বিষয়ে আরও জানতে tf.function এবং ConcreteFunctions দেখুন 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

একটি কাস্টম মডেল লোড এবং ব্যবহার করা হচ্ছে

আপনি যখন পাইথন একটি SavedModel, সমস্ত লোড tf.Variable গুণাবলীর tf.function -decorated পদ্ধতি, এবং tf.Module গুলি একই বস্তুর কাঠামো পুনরুদ্ধার করা হয়েছে যেমন মূল সংরক্ষিত 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

কারণ কোন পাইথন কোড সংরক্ষিত হয়, একটি কলিং tf.function একটি নতুন ইনপুট স্বাক্ষর ব্যর্থ হয়ে যাবে:

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

বেসিক ফাইন-টিউনিং

পরিবর্তনশীল বস্তু উপলব্ধ, এবং আপনি আমদানিকৃত ফাংশন মাধ্যমে ব্যাকপ্রপ করতে পারেন. সাধারণ ক্ষেত্রে একটি সংরক্ষিত মডেলকে সূক্ষ্ম-টিউন করার (অর্থাৎ পুনরায় প্রশিক্ষণ) করার জন্য এটি যথেষ্ট।

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

সাধারণ ফাইন-টিউনিং

Keras থেকে SavedModel উপলব্ধ আরো বিস্তারিত জানার একটি প্লেইন তুলনায় __call__ ফাইন টিউনিং এর আরো উন্নত মামলা মোকাবেলার। TensorFlow Hub সূক্ষ্ম-টিউনিংয়ের উদ্দেশ্যে শেয়ার করা SavedModels-এ প্রযোজ্য হলে নিম্নলিখিতগুলি প্রদান করার সুপারিশ করে:

  • মডেল ব্যবহার করে ঝরে পড়া বা অন্য কৌশল যা প্রশিক্ষণ ও অনুমান (ব্যাচ নিয়মমাফিককরণ মত) মধ্যে ফরওয়ার্ড পাস পৃথক, তাহলে __call__ পদ্ধতি একটি ঐচ্ছিক, পাইথন-মূল্যবান লাগে training= যুক্তি ডিফল্ট যে False কিন্তু সেট করা যেতে পারে True
  • পরবর্তী __call__ গুণ, আছে .variable এবং .trainable_variable ভেরিয়েবল সংশ্লিষ্ট তালিকা সঙ্গে বৈশিষ্ট্যাবলী। একটি পরিবর্তনশীল মূলত trainable ছিল কিন্তু ফাইন টিউনিং সময় নিথর করা বোঝানো হয় থেকে বাদ দেওয়া হয় .trainable_variables
  • Keras মত অবকাঠামো যে স্তর বা উপ-মডেলের বৈশিষ্ট্য যেমন ওজন regularizers প্রতিনিধিত্ব অনুরোধে জন্য, একটি হতে পারে .regularization_losses অ্যাট্রিবিউট। এটি শূন্য-আর্গুমেন্ট ফাংশনগুলির একটি তালিকা ধারণ করে যার মানগুলি মোট ক্ষতির সাথে যোগ করার জন্য বোঝানো হয়।

প্রাথমিক MobileNet উদাহরণে ফিরে গেলে, আপনি এর মধ্যে কিছু দেখতে পাবেন:

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

রপ্তানির সময় স্বাক্ষর উল্লেখ করা

TensorFlow মত সরঞ্জাম পরিবেশন করছে এবং saved_model_cli SavedModels সঙ্গে ইন্টারঅ্যাক্ট করতে পারবেন। কোন ConcreteFunctions ব্যবহার করতে হবে তা নির্ধারণ করতে এই টুলগুলিকে সাহায্য করার জন্য, আপনাকে পরিবেশন স্বাক্ষরগুলি নির্দিষ্ট করতে হবে। tf.keras.Model গুলি স্বয়ংক্রিয়ভাবে স্বাক্ষর ভজনা উল্লেখ, কিন্তু আপনি স্পষ্টভাবে আমাদের কাস্টম মডিউল জন্য একটি ভজনা স্বাক্ষর ঘোষণা করতে হবে।

ডিফল্টরূপে, কোন স্বাক্ষর একটি কাস্টম ঘোষণা করা হয় tf.Module

assert len(imported.signatures) == 0

একটি ভজনা স্বাক্ষর ঘোষণা করার জন্য, একটি ConcreteFunction ব্যবহার উল্লেখ signatures kwarg। যখন একটি একক স্বাক্ষর উল্লেখ, তার স্বাক্ষর কী হবে 'serving_default' , যা ধ্রুব হিসেবে সংরক্ষিত হয় tf.saved_model.DEFAULT_SERVING_SIGNATURE_DEF_KEY

module_with_signature_path = os.path.join(tmpdir, 'module_with_signature')
call = module.__call__.get_concrete_function(tf.TensorSpec(None, tf.float32))
tf.saved_model.save(module, module_with_signature_path, signatures=call)
Tracing with Tensor("x:0", dtype=float32)
Tracing with Tensor("x:0", dtype=float32)
INFO:tensorflow:Assets written to: /tmp/tmpbf9fpzwt/module_with_signature/assets
imported_with_signatures = tf.saved_model.load(module_with_signature_path)
list(imported_with_signatures.signatures.keys())
['serving_default']

একাধিক স্বাক্ষর রপ্তানি করতে, ConcreteFunctions-এ স্বাক্ষর কীগুলির একটি অভিধান পাস করুন৷ প্রতিটি স্বাক্ষর কী একটি 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']

ডিফল্টরূপে, আউটপুট টেন্সর নাম মোটামুটি জেনেরিক, মত output_0 । আউটপুট নাম নিয়ন্ত্রণ করতে, আপনার পরিবর্তন tf.function একটি অভিধান আউটপুট আউটপুট নাম ম্যাপের দেখাবে। ইনপুটগুলির নামগুলি পাইথন ফাংশন আর্গ নামগুলি থেকে নেওয়া হয়েছে।

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++ এ একটি সংরক্ষিত মডেল লোড করুন

সি ++ SavedModel সংস্করণ লোডার SessionOptions এবং RunOptions যার ফলে সময়, একটি পাথ থেকে একটি SavedModel লোড করতে একটি API প্রদান করে। আপনাকে গ্রাফের সাথে যুক্ত ট্যাগগুলি লোড করতে হবে। SavedModel-এর লোড করা সংস্করণটিকে SavedModelBundle বলা হয় এবং এতে MetaGraphDef এবং এটি লোড করা সেশন রয়েছে।

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

SavedModel কমান্ড লাইন ইন্টারফেসের বিশদ বিবরণ

আপনি একটি SavedModel পরিদর্শন এবং কার্যকর করতে SavedModel কমান্ড লাইন ইন্টারফেস (CLI) ব্যবহার করতে পারেন। উদাহরণস্বরূপ, যদি আপনি পরিদর্শন করা মডেলের CLI ব্যবহার করতে পারেন SignatureDef গুলি। CLI আপনাকে দ্রুত নিশ্চিত করতে সক্ষম করে যে ইনপুট টেনসরের টাইপ এবং আকৃতি মডেলের সাথে মেলে। তাছাড়া, আপনি যদি আপনার মডেল পরীক্ষা করতে চান, তাহলে আপনি CLI ব্যবহার করে বিভিন্ন ফরম্যাটে নমুনা ইনপুট পাস করে এবং তারপর আউটপুট আনতে পারেন।

SavedModel CLI ইনস্টল করুন

বিস্তৃতভাবে বলতে গেলে, আপনি নিম্নলিখিত দুটি উপায়ে টেনসরফ্লো ইনস্টল করতে পারেন:

  • একটি পূর্ব-নির্মিত টেনসরফ্লো বাইনারি ইনস্টল করার মাধ্যমে।
  • সোর্স কোড থেকে টেনসরফ্লো তৈরি করে।

আপনি যদি একটি প্রাক বিল্ট TensorFlow বাইনারি মাধ্যমে TensorFlow ইনস্টল করে থাকেন, তারপর SavedModel CLI ইতিমধ্যে আপনার সিস্টেমে পথনাম এ ইনস্টল করা bin/saved_model_cli

আপনি সোর্স কোড থেকে TensorFlow নির্মিত থাকে, তাহলে আপনি গড়ে তুলতে নিম্নলিখিত অতিরিক্ত কমান্ড চলবে saved_model_cli :

$ bazel build tensorflow/python/tools:saved_model_cli

কমান্ডের ওভারভিউ

SavedModel CLI একটি SavedModel-এ নিম্নলিখিত দুটি কমান্ড সমর্থন করে:

  • show , যা শো একটি SavedModel থেকে কম্পিউটেশন পাওয়া যায়।
  • run , যা একটি SavedModel থেকে একটি গণনার চালানো হয়।

show কমান্ড

একজন SavedModel এক বা একাধিক মডেল রূপগুলো (টেকনিক্যালি, রয়েছে v1.MetaGraphDef গুলি), তাদের ট্যাগ সেট দ্বারা চিহ্নিত। একটি মডেল পরিবেশন করা করার জন্য, আপনাকে হয়তো ভাবতে পারেন কি ধরনের SignatureDef গুলি প্রতিটি মডেল বৈকল্পিক হয়, এবং তাদের ইনপুট এবং আউটপুট কি আছে। show কমান্ড আপনাকে হায়ারারকিকাল অনুক্রমে SavedModel বিষয়বস্তু পরীক্ষা দেওয়া। এখানে সিনট্যাক্স আছে:

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

উদাহরণস্বরূপ, নিম্নলিখিত কমান্ডটি SavedModel-এ উপলব্ধ সমস্ত ট্যাগ-সেট দেখায়:

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

নিম্নলিখিত কমান্ড শো সমস্ত উপলব্ধ SignatureDef একটি ট্যাগ সেট কী-সমূহ:

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

যদি ট্যাগ সেট একাধিক ট্যাগ নেই, আপনি সমস্ত ট্যাগ নির্দিষ্ট করতে হবে, প্রতিটি ট্যাগ একটি কমা দ্বারা পৃথক করা হয়। উদাহরণ স্বরূপ:

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

সমস্ত ইনপুট দেন একটি নির্দিষ্ট জন্য TensorInfo আউটপুট SignatureDef , মধ্যে পাস SignatureDef চাবিকাঠি signature_def বিকল্প। আপনি যখন গণনা গ্রাফটি পরে কার্যকর করার জন্য ইনপুট টেনসরগুলির টেনসর কী মান, dtype এবং আকার জানতে চান তখন এটি খুব দরকারী। উদাহরণ স্বরূপ:

$ 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 সমস্ত উপলব্ধ তথ্য দেখাতে, ব্যবহার --all বিকল্প। উদাহরণ স্বরূপ:

$ 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 কমান্ড

ডাকা run কমান্ড গ্রাফ গণনার চালানোর জন্য, ইনপুট ক্ষণস্থায়ী এবং তারপর প্রদর্শন করার (এবং ঐচ্ছিকরূপে সঞ্চয় নয়) আউটপুট। এখানে সিনট্যাক্স আছে:

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 কমান্ড নিম্নলিখিত তিনটি মডেলের ইনপুট পাস করার উপায় প্রদান করে:

  • --inputs বিকল্প ফাইলের মধ্যে numpy ndarray পাস করতে সক্ষম করে।
  • --input_exprs বিকল্পটি পাইথন এক্সপ্রেশন পাস করতে সক্ষম করে।
  • --input_examples বিকল্প আপনি পাস করতে সক্ষম হবেন tf.train.Example

--inputs

ফাইলের মধ্যে ইনপুট ডেটা প্রেরণ করার জন্য, উল্লেখ --inputs বিকল্প, নিম্নলিখিত সাধারণ বিন্যাস লাগে:

--inputs <INPUTS>

যেখানে ইনপুটগুলি নিম্নলিখিত ফরম্যাটের পারেন হল:

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

আপনি একাধিক ইনপুটগুলি পাস হতে পারে। আপনি একাধিক ইনপুট পাস না, একটি সেমিকোলন ব্যবহার ইনপুটগুলি প্রতিটি আলাদা করে রাখে।

saved_model_cli ব্যবহারসমূহ numpy.load ফাইলের নাম লোড করা হয়নি। ফাইলের নাম নিম্নলিখিত যে কোনো ফর্ম্যাটে থাকতে পারে:

  • .npy
  • .npz
  • আচার বিন্যাস

একজন .npy ফাইল সবসময় একটি numpy ndarray ধারণ করে। অতএব, যখন লোডিং A থেকে .npy ফাইল, বিষয়বস্তু সরাসরি নির্দিষ্ট ইনপুট টেন্সর নির্ধারিত করা হবে না। আপনি যে সঙ্গে একটি variable_name উল্লেখ করেন .npy ফাইল, variable_name এড়িয়ে যাওয়া হবে এবং একটি সতর্কবার্তা জারি করা হবে।

একটি থেকে লোড করা হচ্ছে যখন .npz (জিপ) ফাইল, আপনি বিকল্প হিসেবে ইনপুট টেন্সর কী-এর জন্য লোড করতে জিপ ফাইল মধ্যে পরিবর্তনশীল সনাক্ত করার জন্য একটি variable_name উল্লেখ করতে পারেন। আপনি যদি একটি variable_name উল্লেখ না করেন, তাহলে SavedModel CLI চেক করুন যে শুধুমাত্র একটি ফাইল জিপ ফাইল মধ্যে অন্তর্ভুক্ত করা হয় এবং নির্দিষ্ট ইনপুট টেন্সর কীয়ের জন্য এটা লোড করা হবে।

একটি জরান ফাইল থেকে লোড হচ্ছে, যদি কোনো যখন variable_name বর্গাকার বন্ধনী মধ্যে উল্লিখিত থাকলে, যাই হোক না কেন যে জরান ফাইল ভিতরে নিদিষ্ট ইনপুট টেন্সর কী প্রেরণ করা হবে না। অন্যথায়, SavedModel CLI অনুমান করা হবে একটি অভিধান জরান ফাইলে সংরক্ষণ করা হয় এবং variable_name সংশ্লিষ্ট মান ব্যবহার করা হবে।

--input_exprs

পাইথন এক্সপ্রেশন মাধ্যমে ইনপুট প্রেরণ করার জন্য, উল্লেখ --input_exprs বিকল্প। এই আপনি প্রায় মিথ্যা ডেটা ফাইলগুলির না জন্য উপযোগী হতে পারে, কিন্তু এখনও মানসিক সুস্থতা করতে চান কিছু সহজ ইনপুট dtype এবং মডেল এর আকৃতি মেলে সঙ্গে মডেল পরীক্ষা SignatureDef গুলি। উদাহরণ স্বরূপ:

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

পাইথন এক্সপ্রেশন ছাড়াও, আপনি নম্পি ফাংশনও পাস করতে পারেন। উদাহরণ স্বরূপ:

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

(নোট যে numpy মডিউল রূপে আপনার জন্য উপলব্ধ ইতিমধ্যে np ।)

--input_examples

প্রেরণ করার জন্য tf.train.Example ইনপুট হিসাবে উল্লেখ --input_examples বিকল্প। প্রতিটি ইনপুট কী জন্য, এটি অভিধান, যেখানে প্রতিটি অভিধানের একটি দৃষ্টান্ত হল একটি তালিকা লাগে tf.train.Example । অভিধান কীগুলি হল বৈশিষ্ট্য এবং মানগুলি হল প্রতিটি বৈশিষ্ট্যের মান তালিকা৷ উদাহরণ স্বরূপ:

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

আউটপুট সংরক্ষণ করুন

ডিফল্টরূপে, SavedModel CLI stdout-এ আউটপুট লেখে। একটি ডিরেক্টরি প্রেরণ করা হয়, তাহলে --outdir বিকল্প, আউটপুট হিসাবে সংরক্ষণ করা হবে .npy দেওয়া ডিরেক্টরি অধীনে আউটপুট টেন্সর কী নামকরণ ফাইল।

ব্যবহার করুন --overwrite বিদ্যমান আউটপুট ফাইল ওভাররাইট করতে।