টেন্সরফ্লো লাইটে স্বাক্ষর

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

টেনসরফ্লো লাইট টেনসরফ্লো মডেলের ইনপুট/আউটপুট স্পেসিফিকেশনকে টেনসরফ্লো লাইট মডেলে রূপান্তর করতে সহায়তা করে। ইনপুট/আউটপুট স্পেসিফিকেশনকে "স্বাক্ষর" বলা হয়। একটি সংরক্ষিত মডেল নির্মাণ বা কংক্রিট ফাংশন তৈরি করার সময় স্বাক্ষরগুলি নির্দিষ্ট করা যেতে পারে।

টেনসরফ্লো লাইটে স্বাক্ষরগুলি নিম্নলিখিত বৈশিষ্ট্যগুলি প্রদান করে:

  • তারা TensorFlow মডেলের স্বাক্ষরকে সম্মান করে রূপান্তরিত TensorFlow Lite মডেলের ইনপুট এবং আউটপুট নির্দিষ্ট করে।
  • একাধিক এন্ট্রি পয়েন্ট সমর্থন করার জন্য একটি একক TensorFlow Lite মডেলকে অনুমতি দিন।

স্বাক্ষর তিনটি টুকরা গঠিত হয়:

  • ইনপুট: স্বাক্ষরে ইনপুট নাম থেকে ইনপুট টেনসরে ইনপুটগুলির জন্য মানচিত্র।
  • আউটপুট: স্বাক্ষরে আউটপুট নাম থেকে আউটপুট টেনসরে আউটপুট ম্যাপিংয়ের জন্য মানচিত্র।
  • স্বাক্ষর কী: গ্রাফের একটি এন্ট্রি পয়েন্ট চিহ্নিত করে এমন নাম।

সেটআপ

import tensorflow as tf

উদাহরণ মডেল

ধরা যাক আমাদের দুটি কাজ আছে, যেমন, এনকোডিং এবং ডিকোডিং, টেনসরফ্লো মডেল হিসাবে:

class Model(tf.Module):

  @tf.function(input_signature=[tf.TensorSpec(shape=[None], dtype=tf.float32)])
  def encode(self, x):
    result = tf.strings.as_string(x)
    return {
         "encoded_result": result
    }

  @tf.function(input_signature=[tf.TensorSpec(shape=[None], dtype=tf.string)])
  def decode(self, x):
    result = tf.strings.to_number(x)
    return {
         "decoded_result": result
    }

স্বাক্ষর অনুসারে, উপরের টেনসরফ্লো মডেলটি নিম্নরূপ সংক্ষিপ্ত করা যেতে পারে:

  • স্বাক্ষর

    • কী: এনকোড
    • ইনপুট: {"x"}
    • আউটপুট: {"encoded_result"}
  • স্বাক্ষর

    • কী: ডিকোড
    • ইনপুট: {"x"}
    • আউটপুট: {"decoded_result"}

স্বাক্ষর সহ একটি মডেল রূপান্তর করুন

TensorFlow Lite রূপান্তরকারী APIগুলি রূপান্তরিত TensorFlow Lite মডেলে উপরের স্বাক্ষর তথ্য নিয়ে আসবে।

এই রূপান্তর কার্যকারিতা TensorFlow সংস্করণ 2.7.0 থেকে শুরু করে সমস্ত রূপান্তরকারী API-এ উপলব্ধ। উদাহরণ ব্যবহার দেখুন.

সংরক্ষিত মডেল থেকে

model = Model()

# Save the model
SAVED_MODEL_PATH = 'content/saved_models/coding'

tf.saved_model.save(
    model, SAVED_MODEL_PATH,
    signatures={
      'encode': model.encode.get_concrete_function(),
      'decode': model.decode.get_concrete_function()
    })

# Convert the saved model using TFLiteConverter
converter = tf.lite.TFLiteConverter.from_saved_model(SAVED_MODEL_PATH)
converter.target_spec.supported_ops = [
    tf.lite.OpsSet.TFLITE_BUILTINS,  # enable TensorFlow Lite ops.
    tf.lite.OpsSet.SELECT_TF_OPS  # enable TensorFlow ops.
]
tflite_model = converter.convert()

# Print the signatures from the converted model
interpreter = tf.lite.Interpreter(model_content=tflite_model)
signatures = interpreter.get_signature_list()
print(signatures)
2021-11-15 12:17:48.388332: W tensorflow/python/util/util.cc:368] Sets are not currently considered sequences, but this may change in the future, so consider avoiding using them.
INFO:tensorflow:Assets written to: content/saved_models/coding/assets
2021-11-15 12:17:48.727484: W tensorflow/compiler/mlir/lite/python/tf_tfl_flatbuffer_helpers.cc:363] Ignored output_format.
2021-11-15 12:17:48.727522: W tensorflow/compiler/mlir/lite/python/tf_tfl_flatbuffer_helpers.cc:366] Ignored drop_control_dependency.
WARNING:absl:Buffer deduplication procedure will be skipped when flatbuffer library is not properly loaded
2021-11-15 12:17:48.727529: W tensorflow/compiler/mlir/lite/python/tf_tfl_flatbuffer_helpers.cc:372] Ignored change_concat_input_ranges.
2021-11-15 12:17:48.767576: W tensorflow/compiler/mlir/lite/flatbuffer_export.cc:1891] TFLite interpreter needs to link Flex delegate in order to run the model since it contains the following Select TFop(s):
Flex ops: FlexAsString, FlexStringToNumber
Details:
    tf.AsString(tensor<?xf32>) -> (tensor<?x!tf_type.string>) : {device = "", fill = "", precision = -1 : i64, scientific = false, shortest = false, width = -1 : i64}
    tf.StringToNumber(tensor<?x!tf_type.string>) -> (tensor<?xf32>) : {device = "", out_type = f32}
See instructions: https://www.tensorflow.org/lite/guide/ops_select
{'decode': {'inputs': ['x'], 'outputs': ['decoded_result']}, 'encode': {'inputs': ['x'], 'outputs': ['encoded_result']} }
INFO: Created TensorFlow Lite delegate for select TF ops.
INFO: TfLiteFlexDelegate delegate: 1 nodes delegated out of 1 nodes with 1 partitions.

কেরাস মডেল থেকে

# Generate a Keras model.
keras_model = tf.keras.Sequential(
    [
        tf.keras.layers.Dense(2, input_dim=4, activation='relu', name='x'),
        tf.keras.layers.Dense(1, activation='relu', name='output'),
    ]
)

# Convert the keras model using TFLiteConverter.
# Keras model converter API uses the default signature automatically.
converter = tf.lite.TFLiteConverter.from_keras_model(keras_model)
tflite_model = converter.convert()

# Print the signatures from the converted model
interpreter = tf.lite.Interpreter(model_content=tflite_model)

signatures = interpreter.get_signature_list()
print(signatures)
INFO:tensorflow:Assets written to: /tmp/tmplhr7j714/assets
INFO:tensorflow:Assets written to: /tmp/tmplhr7j714/assets
2021-11-15 12:17:49.368226: W tensorflow/compiler/mlir/lite/python/tf_tfl_flatbuffer_helpers.cc:363] Ignored output_format.
2021-11-15 12:17:49.368264: W tensorflow/compiler/mlir/lite/python/tf_tfl_flatbuffer_helpers.cc:366] Ignored drop_control_dependency.
WARNING:absl:Buffer deduplication procedure will be skipped when flatbuffer library is not properly loaded
{'serving_default': {'inputs': ['x_input'], 'outputs': ['output']} }

কংক্রিট ফাংশন থেকে

model = Model()

# Convert the concrete functions using TFLiteConverter
converter = tf.lite.TFLiteConverter.from_concrete_functions(
    [model.encode.get_concrete_function(),
     model.decode.get_concrete_function()], model)
converter.target_spec.supported_ops = [
    tf.lite.OpsSet.TFLITE_BUILTINS,  # enable TensorFlow Lite ops.
    tf.lite.OpsSet.SELECT_TF_OPS  # enable TensorFlow ops.
]
tflite_model = converter.convert()

# Print the signatures from the converted model
interpreter = tf.lite.Interpreter(model_content=tflite_model)
signatures = interpreter.get_signature_list()
print(signatures)
INFO:tensorflow:Assets written to: /tmp/tmpc14_l70o/assets
INFO:tensorflow:Assets written to: /tmp/tmpc14_l70o/assets
2021-11-15 12:17:49.538814: W tensorflow/compiler/mlir/lite/python/tf_tfl_flatbuffer_helpers.cc:363] Ignored output_format.
2021-11-15 12:17:49.538850: W tensorflow/compiler/mlir/lite/python/tf_tfl_flatbuffer_helpers.cc:366] Ignored drop_control_dependency.
WARNING:absl:Buffer deduplication procedure will be skipped when flatbuffer library is not properly loaded
{'decode': {'inputs': ['x'], 'outputs': ['decoded_result']}, 'encode': {'inputs': ['x'], 'outputs': ['encoded_result']} }
2021-11-15 12:17:49.572773: W tensorflow/compiler/mlir/lite/flatbuffer_export.cc:1891] TFLite interpreter needs to link Flex delegate in order to run the model since it contains the following Select TFop(s):
Flex ops: FlexAsString, FlexStringToNumber
Details:
    tf.AsString(tensor<?xf32>) -> (tensor<?x!tf_type.string>) : {device = "", fill = "", precision = -1 : i64, scientific = false, shortest = false, width = -1 : i64}
    tf.StringToNumber(tensor<?x!tf_type.string>) -> (tensor<?xf32>) : {device = "", out_type = f32}
See instructions: https://www.tensorflow.org/lite/guide/ops_select

স্বাক্ষর চালান

TensorFlow অনুমান API স্বাক্ষর-ভিত্তিক মৃত্যুদন্ড সমর্থন করে:

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

জাভা, সি++ এবং পাইথন ভাষা বাইন্ডিং বর্তমানে উপলব্ধ। নীচের বিভাগগুলির উদাহরণ দেখুন।

জাভা

try (Interpreter interpreter = new Interpreter(file_of_tensorflowlite_model)) {
  // Run encoding signature.
  Map<String, Object> inputs = new HashMap<>();
  inputs.put("x", input);
  Map<String, Object> outputs = new HashMap<>();
  outputs.put("encoded_result", encoded_result);
  interpreter.runSignature(inputs, outputs, "encode");

  // Run decoding signature.
  Map<String, Object> inputs = new HashMap<>();
  inputs.put("x", encoded_result);
  Map<String, Object> outputs = new HashMap<>();
  outputs.put("decoded_result", decoded_result);
  interpreter.runSignature(inputs, outputs, "decode");
}

সি++

SignatureRunner* encode_runner =
    interpreter->GetSignatureRunner("encode");
encode_runner->ResizeInputTensor("x", {100});
encode_runner->AllocateTensors();

TfLiteTensor* input_tensor = encode_runner->input_tensor("x");
float* input = input_tensor->data.f;
// Fill `input`.

encode_runner->Invoke();

const TfLiteTensor* output_tensor = encode_runner->output_tensor(
    "encoded_result");
float* output = output_tensor->data.f;
// Access `output`.

পাইথন

# Load the TFLite model in TFLite Interpreter
interpreter = tf.lite.Interpreter(model_content=tflite_model)

# Print the signatures from the converted model
signatures = interpreter.get_signature_list()
print('Signature:', signatures)

# encode and decode are callable with input as arguments.
encode = interpreter.get_signature_runner('encode')
decode = interpreter.get_signature_runner('decode')

# 'encoded' and 'decoded' are dictionaries with all outputs from the inference.
input = tf.constant([1, 2, 3], dtype=tf.float32)
print('Input:', input)
encoded = encode(x=input)
print('Encoded result:', encoded)
decoded = decode(x=encoded['encoded_result'])
print('Decoded result:', decoded)
Signature: {'decode': {'inputs': ['x'], 'outputs': ['decoded_result']}, 'encode': {'inputs': ['x'], 'outputs': ['encoded_result']} }
Input: tf.Tensor([1. 2. 3.], shape=(3,), dtype=float32)
Encoded result: {'encoded_result': array([b'1.000000', b'2.000000', b'3.000000'], dtype=object)}
Decoded result: {'decoded_result': array([1., 2., 3.], dtype=float32)}

পরিচিত সীমাবদ্ধতা

  • যেহেতু TFLite দোভাষী থ্রেড নিরাপত্তার নিশ্চয়তা দেয় না, তাই একই দোভাষীর স্বাক্ষর রানার একযোগে কার্যকর করা হবে না।
  • C/iOS/Swift-এর জন্য সমর্থন এখনও উপলব্ধ নয়।

আপডেট

  • সংস্করণ 2.7
    • একাধিক স্বাক্ষর বৈশিষ্ট্য বাস্তবায়িত হয়.
    • সংস্করণ দুই থেকে সমস্ত রূপান্তরকারী API স্বাক্ষর-সক্ষম TensorFlow Lite মডেল তৈরি করে।
  • সংস্করণ 2.5
    • স্বাক্ষর বৈশিষ্ট্য মাধ্যমে উপলব্ধ from_saved_model রূপান্তরকারী API- টি।