This page was translated by the Cloud Translation API.
Switch to English

টেনসরফ্লো 2 তে টিএফ হাব থেকে সেভডমোডেলস

টেনসরফ্লো 2 এর স্যাভডমোডেল ফর্ম্যাটটি হ'ল প্রাক-প্রশিক্ষিত মডেলগুলি এবং টেনসরফ্লো হাবের মডেল টুকরা ভাগ করার প্রস্তাবিত উপায়। এটি পুরানো টিএফ 1 হাব ফর্ম্যাটটি প্রতিস্থাপন করে এবং এপিআইয়ের একটি নতুন সেট নিয়ে আসে।

এই পৃষ্ঠায় ব্যাখ্যা করা হয় যে কীভাবে নিম্ন-স্তরের hub.load() এপিআই এবং এর hub.KerasLayer মোড়ক দিয়ে hub.KerasLayer 2 প্রোগ্রামে টিএফ 2 সেভডমডেলগুলি পুনরায় ব্যবহার করতে হয়। (সাধারণত, hub.KerasLayer অন্যান্য tf.keras.layers সাথে একত্রিত হয়ে কেরাস মডেল বা model_fn 2 model_fn তৈরি করতে পারে)) এই এপিআইগুলি লিগ্যাসি মডেলগুলি TF1 হাব ফর্ম্যাটে সীমার মধ্যেও লোড করতে পারে, সামঞ্জস্যতা গাইডটি দেখুন

টেনসরফ্লো 1 এর ব্যবহারকারীরা টিএফ 1.15 এ আপডেট করতে পারেন এবং তারপরে একই API গুলি ব্যবহার করতে পারেন। টিএফ 1 এর পুরানো সংস্করণগুলি কাজ করে না।

টিএফ হাব থেকে সেভডমডেলস ব্যবহার করা

কেরাসে একটি সেভডমডেল ব্যবহার করা

কেরাস লেয়ার অবজেক্ট রচনা করে গভীর শিক্ষার মডেল তৈরির জন্য টেনসরফ্লো এর উচ্চ-স্তরের এপিআই। tensorflow_hub লাইব্রেরি ক্লাস hub.KerasLayer সরবরাহ করে hub.KerasLayer

এখানে প্রাক-প্রশিক্ষিত পাঠ্য এম্বেডিং ব্যবহারের উদাহরণ রয়েছে:

import tensorflow as tf
import tensorflow_hub as hub

hub_url = "https://tfhub.dev/google/tf2-preview/nnlm-en-dim128/1"
embed = hub.KerasLayer(hub_url)
embeddings = embed(["A long sentence.", "single-word", "http://example.com"])
print(embeddings.shape, embeddings.dtype)

এটি থেকে, পাঠ্য শ্রেণিবদ্ধকারীকে সাধারণ কেরাস উপায়ে তৈরি করা যায়:

model = tf.keras.Sequential([
    embed,
    tf.keras.layers.Dense(16, activation="relu"),
    tf.keras.layers.Dense(1, activation="sigmoid"),
])

পাঠ্য শ্রেণিবদ্ধকরণ কোলাব কীভাবে এই জাতীয় শ্রেণিবদ্ধকে প্রশিক্ষণ এবং মূল্যায়ন করতে হয় তার একটি সম্পূর্ণ উদাহরণ।

একটি hub.KerasLayer মডেল ওজন hub.KerasLayer ডিফল্টরূপে অ প্রশিক্ষণযোগ্যতে সেট করা আছে। কীভাবে এটি পরিবর্তন করা যায় তার জন্য নীচে সূক্ষ্ম সুরকরণের বিভাগটি দেখুন। কেরাসে যথারীতি একই স্তর অবজেক্টের সমস্ত অ্যাপ্লিকেশনের মধ্যে ওজন ভাগ করা হয়।

একটি অনুমানের মধ্যে একটি সেভডমডেল ব্যবহার করা

TensorFlow এর ব্যবহারকারীরা মূল্নির্ধারক বিতরণ প্রশিক্ষণ জন্য API তাদের লেখার মাধ্যমে মেমরি হাব থেকে SavedModels ব্যবহার করতে পারেন model_fn পরিপ্রেক্ষিতে hub.KerasLayer অন্যদের মধ্যে tf.keras.layers

পর্দার আড়ালে: সেভডমডেল ডাউনলোড এবং ক্যাশিং aching

টেনসরফ্লো হাব (বা অন্যান্য এইচটিটিপিএস সার্ভারগুলি যা এর হোস্টিং প্রোটোকল প্রয়োগ করে) থেকে একটি সেভডমোডেল ব্যবহার করে এটি ইতিমধ্যে উপস্থিত না থাকলে স্থানীয় ফাইল সিস্টেমে ডাউনলোড করে এবং সংক্ষেপিত করে। এনভায়রনমেন্ট ভেরিয়েবল TFHUB_CACHE_DIR কে ডাউনলোড করা এবং সঙ্কুচিত সেভডমোডেলগুলি ক্যাশে করার জন্য ডিফল্ট অস্থায়ী অবস্থানের ওভাররাইডে সেট করা যেতে পারে। বিশদ জন্য, দেখুন ক্যাচিং

নিম্ন-স্তরের টেনসরফ্লোতে একটি সেভডমডেল ব্যবহার করা

ফাংশন hub.load(handle) একটি সেভডমডেল ডাউনলোড করে এবং ডিকম্প্রেস করে (যদি না handle ইতিমধ্যে একটি ফাইল সিস্টেমের পাথ না থাকে) এবং তারপরে এটি tf.saved_model.load() এর অন্তর্নির্মিত ফাংশন tf.saved_model.load() দিয়ে লোড করার ফলাফল প্রদান করে। অতএব, hub.load() কোনও বৈধ সাভেদমোডেল পরিচালনা করতে পারে (টিএফ 1 এর পূর্বসূরী hub.Module বিপরীতে) hub.Module

উন্নত বিষয়: লোড হওয়ার পরে সেভডমডেল থেকে কী আশা করা যায়

সেভডমোডেলের বিষয়বস্তুর উপর নির্ভর করে, اعتراض obj = hub.load(...) বিভিন্ন উপায়ে আহ্বান করা যেতে পারে (যেমন টেনসরফ্লো এর সেভডমোডেল গাইডে আরও বৃহত্তর বিশদে ব্যাখ্যা করা হয়েছে:

  • সেভডমোডেল (যদি থাকে তবে) এর পরিবেশনকারী স্বাক্ষরগুলি কংক্রিট ফাংশনগুলির অভিধান হিসাবে উপস্থাপিত হয় এবং tensors_out = obj.signatures["serving_default"](**tensors_in) ইনপুট এবং আউটপুট দ্বারা tensors_out = obj.signatures["serving_default"](**tensors_in) অভিধান সহ, tensors_out = obj.signatures["serving_default"](**tensors_in) নামে অভিহিত হতে পারে নাম এবং স্বাক্ষরের আকার এবং dtype সীমাবদ্ধতা সাপেক্ষে।

  • সংরক্ষিত অবজেক্টের @tf.function সজ্জিত পদ্ধতিগুলি (যদি থাকে তবে) tf.function অবজেক্ট হিসাবে পুনরুদ্ধার করা হয় যা টেনসর এবং নন-টেনসর আর্গুমেন্টগুলির সমস্ত সমন্বয় দ্বারা কল করা যেতে পারে যার জন্য tf.function সংরক্ষণের আগে সনাক্ত করা হয়েছিল। বিশেষ করে, যদি সেখানে একটি হল obj.__call__ উপযুক্ত ট্রেস সঙ্গে পদ্ধতি, obj নিজেই একটি পাইথন ফাংশন মত বলা যায় না। একটি সাধারণ উদাহরণ output_tensor = obj(input_tensor, training=False) মতো দেখতে output_tensor = obj(input_tensor, training=False)

এটি সেভডমোডেলগুলি প্রয়োগ করতে পারে এমন ইন্টারফেসগুলিতে বিশাল স্বাধীনতা ছেড়ে দেয়। পুনর্ব্যবহারযোগ্য SavedModels ইন্টারফেস জন্য obj নিয়মাবলী স্থাপন যেমন মত অ্যাডাপ্টার সহ ক্লায়েন্ট কোড, যে hub.KerasLayer জানি SavedModel কীভাবে ব্যবহার করবেন তা।

কিছু স্যাভডমোডেলস সেই কনভেনশনটি অনুসরণ করতে পারে না, বিশেষত পুরো মডেলগুলি বৃহত্তর মডেলগুলিতে পুনরায় ব্যবহার করা উচিত নয় এবং কেবল পরিবেশনকারী স্বাক্ষর সরবরাহ করে।

একটি সেভডমডেলে ট্রেনযোগ্য ভেরিয়েবলগুলি ট্রেনযোগ্য হিসাবে পুনরায় লোড করা হয় এবং tf.GradientTape ডিফল্টরূপে দেখবে। কিছু ক্যাভেটের জন্য নীচে সূক্ষ্ম সুরকরণের বিভাগটি দেখুন এবং প্রারম্ভিকদের জন্য এড়ানো বিবেচনা করুন। এমনকি যদি আপনি সূক্ষ্ম-সুর করতে চান তবে আপনি দেখতে চাইতে পারেন obj.trainable_variables কেবলমাত্র প্রাথমিক প্রশিক্ষণযোগ্য ভেরিয়েবলগুলির একটি উপসেটকে পুনরায় প্রশিক্ষণের পরামর্শ দেয়।

টিএফ হাবের জন্য সেভডমডেল তৈরি করা হচ্ছে

ওভারভিউ

সাভেডমোডেল প্রশিক্ষিত মডেল বা মডেল টুকরা জন্য টেনসরফ্লো এর মানক সিরিয়ালাইজেশন ফর্ম্যাট। এটি মডেলটির প্রশিক্ষিত ওজন একসাথে তার টেকনরফ্লো অপারেশনগুলির গণনা সম্পাদনের জন্য সঞ্চয় করে। এটি তৈরি করা কোড থেকে এটি স্বাধীনভাবে ব্যবহার করা যেতে পারে। বিশেষত, এটি কেরাসের মতো বিভিন্ন উচ্চ-স্তরের মডেল-বিল্ডিং এপিআইগুলিতে পুনরায় ব্যবহার করা যেতে পারে, কারণ টেনসরফ্লো অপারেশনগুলি তাদের সাধারণ প্রাথমিক ভাষা।

কেরাস থেকে সংরক্ষণ করা হচ্ছে

tf.keras.Model.save() 2 দিয়ে শুরু করে, tf.keras.Model.save() এবং tf.keras.models.save_model() সেভডমোডেল বিন্যাসে (এইচডিএফ 5 নয় tf.keras.models.save_model() ডিফল্ট। ফলস্বরূপ সংরক্ষিত মোডেলগুলি hub.load() , hub.KerasLayer এবং অন্যান্য উচ্চ-স্তরের এপিআই উপলব্ধ হওয়ার সাথে সাথে একই জাতীয় অ্যাডাপ্টারের সাথে ব্যবহার করা যেতে পারে।

একটি সম্পূর্ণ কেরাস মডেল ভাগ করতে, কেবল অন্তর্ভুক্ত_পটিমাইজার include_optimizer=False দিয়ে এটি সংরক্ষণ করুন।

কেরাস মডেলের একটি অংশ ভাগ করতে, টুকরোটিটিকে নিজের মধ্যে একটি মডেল করুন এবং তারপরে এটি সংরক্ষণ করুন। আপনি হয় শুরু থেকে কোড এর মত আউট করতে পারেন ....

11 বি 84 এ 2497

... বা সত্যের পরে ভাগ করার জন্য টুকরোটি কেটে ফেলুন (যদি এটি আপনার পুরো মডেলের লেয়ারিংয়ের সাথে একত্রিত হয়):

full_model = tf.keras.Model(...)
sharing_input = full_model.get_layer(...).get_output_at(0)
sharing_output = full_model.get_layer(...).get_output_at(0)
piece_to_share = tf.keras.Model(sharing_input, sharing_output)
piece_to_share.save(..., include_optimizer=False)

TensorFlow মডেল GitHub থেকে বার্ট জন্য সাবেক পদ্ধতির (দেখুন ব্যবহার NLP / বার্ট / bert_models.py এবং NLP / বার্ট / export_tfhub.py মধ্যে বিভক্ত করে মনে রাখবেন core_model এবং pretrain_model ) ResNet জন্য এবং পরেরটির পদ্ধতির (দেখুন দৃষ্টি / image_classification / tfhub_export .py )।

নিম্ন-স্তরের টেনসরফ্লো থেকে সংরক্ষণ করা

এটির জন্য টেনসরফ্লো এর সেভডমডেল গাইডের সাথে ভাল পরিচয় প্রয়োজন।

আপনি যদি কেবল একটি পরিবেশনকারী স্বাক্ষর ছাড়াও আরও বেশি সরবরাহ করতে চান তবে আপনার পুনরায় ব্যবহারযোগ্য সেভডমডেল ইন্টারফেসটি প্রয়োগ করতে হবে। ধারণাগতভাবে, এই মত দেখাচ্ছে

class MyMulModel(tf.train.Checkpoint):
  def __init__(self, v_init):
    super(MyMulModel, self).__init__()
    self.v = tf.Variable(v_init)
    self.variables = [self.v]
    self.trainable_variables = [self.v]
    self.regularization_losses = [
        tf.function(input_signature=[])(lambda: 0.001 * self.v**2),
    ]

  @tf.function(input_signature=[tf.TensorSpec(shape=None, dtype=tf.float32)])
  def __call__(self, inputs):
    return tf.multiply(inputs, self.v)

tf.saved_model.save(MyMulModel(2.0), "/tmp/my_mul")

layer = hub.KerasLayer("/tmp/my_mul")
print(layer([10., 20.]))  # [20., 40.]
layer.trainable = True
print(layer.trainable_weights)  # [2.]
print(layer.losses)  # 0.004

টেনসরফ্লো / উদাহরণগুলিতে কোড / সেভড_মডেল / ইন্টিগ্রেশন_স্টেটস / এতে আরও বড় উদাহরণ রয়েছে, এসএসপিexport_mnist.py এবং use_mnist.py পেয়ার।

ফাইন-টিউনিং

আশেপাশের মডেলগুলির সাথে একটি আমদানি করা স্যাভডমোডেলের ইতিমধ্যে প্রশিক্ষিত ভেরিয়েবলগুলি প্রশিক্ষণ দেওয়া স্যাভডমোডেলকে সূক্ষ্ম-সুরকরণ বলা হয়। এটি আরও উন্নত মানের ফলস্বরূপ তৈরি হতে পারে তবে প্রশিক্ষণটি প্রায়শই বেশি দাবীদার করে তোলে (আরও বেশি সময় নিতে পারে, অপটিমাইজার এবং তার হাইপারপামিটারগুলির উপর বেশি নির্ভর করে, অতিরিক্ত ফিটনের ঝুঁকি বাড়ায় এবং সিএনএনগুলির জন্য ডেটাসেট বৃদ্ধির প্রয়োজন হয়, যেমন)। আমরা স্যাভডমোডেল গ্রাহকদের একটি ভাল প্রশিক্ষণ ব্যবস্থা প্রতিষ্ঠিত করার পরে কেবল সূক্ষ্ম সুরক্ষার দিকে নজর দেওয়ার পরামর্শ দিই, এবং কেবলমাত্র সেভডমডেল প্রকাশক এটির পরামর্শ দিলে।

ফাইন-টিউনিং "ধারাবাহিক" মডেল প্যারামিটারগুলি প্রশিক্ষিত করে changes এটি হার্ড-কোডেড রূপান্তরগুলি পরিবর্তন করে না, যেমন টোকেনাইজিং পাঠ্য ইনপুট এবং এম্বেডিং ম্যাট্রিক্সে তাদের সংশ্লিষ্ট এন্ট্রিগুলিতে টোকেন ম্যাপিং।

সেভডমডেল গ্রাহকদের জন্য

একটি hub.KerasLayer তৈরি হচ্ছে hub.KerasLayer

layer = hub.KerasLayer(..., trainable=True)

স্তর দ্বারা লোড হওয়া সেভডমোডেলটির সূক্ষ্ম সুরকরণ সক্ষম করে। এটি সেভডমোডেলে ঘোষিত ট্রেনযোগ্য ওজন এবং ওজন নিয়মিতকরণকে কেরাস মডেলের সাথে যুক্ত করে, এবং প্রশিক্ষিত মোডে (ড্রপআউট ইত্যাদি ভাবুন) সেভডমডেলের গণনা চালায়।

চিত্রের শ্রেণিবদ্ধকরণ কোলাবে alচ্ছিক সূক্ষ্ম-সুরকরণ সহ একটি শেষ-শেষের উদাহরণ রয়েছে।

সূক্ষ্ম-টিউনিংয়ের ফলাফলটি পুনরায় এক্সপোর্ট করা হচ্ছে

উন্নত ব্যবহারকারীরা সূক্ষ্ম-টিউনিংয়ের ফলাফলগুলি সেভডমোডেলে ফিরে সংরক্ষণ করতে পারেন যা মূলত লোড হওয়া পরিবর্তে ব্যবহার করা যেতে পারে। এটি কোডের মতো করা যায়

loaded_obj = hub.load("https://tfhub.dev/...")
hub_layer = hub.KerasLayer(loaded_obj, trainable=True, ...)

model = keras.Sequential([..., hub_layer, ...])
model.compile(...)
model.fit(...)

export_module_dir = os.path.join(os.getcwd(), "finetuned_model_export")
tf.saved_model.save(loaded_obj, export_module_dir)

সেভডমডেল স্রষ্টাদের জন্য

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

কেরাস মডেল থেকে সঞ্চয় করার জন্য সূক্ষ্ম-সুরকরণের কাজের সমস্ত যান্ত্রিক পদ্ধতি তৈরি করা উচিত (ওজন নিয়ন্ত্রণের ক্ষতিগুলি বাঁচানো, প্রশিক্ষণযোগ্য ভেরিয়েবলগুলি ঘোষণা করা, উভয় training=True জন্য __call__ training=True এবং training=False ইত্যাদি) তৈরি করা উচিত)

এমন একটি মডেল ইন্টারফেস চয়ন করুন যা গ্রেডিয়েন্ট প্রবাহের সাথে ভাল খেলবে, যেমন, সফটম্যাক্স সম্ভাব্যতা বা শীর্ষ-কে পূর্বাভাসের পরিবর্তে আউটপুট লগইট।

যদি মডেলটি ড্রপআউট, ব্যাচের নরমালাইজেশন বা হাইপারপ্যারামিটারগুলিকে জড়িত অনুরূপ প্রশিক্ষণ কৌশলগুলি ব্যবহার করে তবে তাদের এমন মানগুলিতে সেট করুন যা অনেক প্রত্যাশিত টার্গেট সমস্যা এবং ব্যাচের আকারের মধ্যে অর্থ দেয়। (এই লেখার হিসাবে কেরাস থেকে সঞ্চয় করা গ্রাহকরা তাদের সামঞ্জস্য করা সহজ করে না, তবে কিছু অপরিশোধিত কাজের জন্য সেন্সরফ্লো / উদাহরণ / সেভড মডেল / ইন্টিগ্রেশন_টেটস / এক্সপোর্ট_মিনিস্ট_সিএনএনপিপি দেখুন see )

পৃথক স্তরগুলিতে ওজন নিয়মিতকরণগুলি সংরক্ষণ করা হয় (তাদের নিয়মিতকরণ শক্তি সহগ সহ) তবে tf.keras.optimizers.Ftrl.l1_regularization_strength=...) মধ্যে থেকে ওজন নিয়ন্ত্রণ (যেমন tf.keras.optimizers.Ftrl.l1_regularization_strength=...) হারিয়ে যায়। সেই অনুযায়ী আপনার সেভডমডেলের গ্রাহকদের পরামর্শ দিন।